如何在判断回文后输出原始短语?Python双端队列实现问题
解决回文判断中输出原始短语的问题
核心思路
用字典存储归一化短语与原始短语的映射关系——键设为归一化后的字符串,值存对应的原始短语(如果多个原始短语归一化后结果相同,值用列表存储避免覆盖)。这样判断完回文后,就能通过归一化字符串反向找到原始内容。
具体实现步骤
- 读取文件并构建映射字典:逐行读取
phrases.txt,保留每一行的原始文本,生成对应的归一化字符串,将两者存入字典。 - 调整回文判断逻辑:保留原有Deque判断逻辑的同时,让函数返回“是否为回文”和“中间字符”两个结果。
- 输出结果:遍历字典,对每个归一化字符串做回文判断,若是回文则输出对应的原始短语和中间字符。
完整代码示例
from collections import deque def isPalindrome(normalized_phrase): dq = deque(normalized_phrase) while len(dq) > 1: if dq.popleft() != dq.pop(): return (False, None) # 返回回文判断结果,以及长度为奇数时的中间字符 return (True, dq[0] if dq else None) # 构建归一化短语与原始短语的映射字典 phrase_map = {} with open('phrases.txt', 'r', encoding='utf-8') as f: for line in f: original_phrase = line.strip() if not original_phrase: # 跳过空行 continue # 执行归一化:移除非字母字符并转小写 normalized = ''.join([c.lower() for c in original_phrase if c.isalpha()]) # 处理重复归一化结果:键已存在则追加原始短语到列表 if normalized in phrase_map: phrase_map[normalized].append(original_phrase) else: phrase_map[normalized] = [original_phrase] # 遍历字典,判断回文并输出结果 for normalized, originals in phrase_map.items(): is_pali, middle_char = isPalindrome(normalized) if is_pali: for original in originals: if middle_char: print(f"原始短语: '{original}' 是回文,中间字符: '{middle_char}'") else: print(f"原始短语: '{original}' 是回文(偶数长度,无中间字符)")
关键细节说明
- 字典设计:用列表存储原始短语,避免多个原始文本归一化后结果相同导致的内容覆盖。
- 归一化逻辑:保留你原有的
isalpha()和lower()处理,确保回文判断逻辑和之前一致。 - 函数返回值:通过元组同时返回判断结果和中间字符,简化后续输出逻辑。
内容的提问来源于stack exchange,提问作者DMOSnd
相关产品推荐
相关产品推荐

