You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在判断回文后输出原始短语?Python双端队列实现问题

解决回文判断中输出原始短语的问题

核心思路

用字典存储归一化短语与原始短语的映射关系——键设为归一化后的字符串,值存对应的原始短语(如果多个原始短语归一化后结果相同,值用列表存储避免覆盖)。这样判断完回文后,就能通过归一化字符串反向找到原始内容。

具体实现步骤

  1. 读取文件并构建映射字典:逐行读取phrases.txt,保留每一行的原始文本,生成对应的归一化字符串,将两者存入字典。
  2. 调整回文判断逻辑:保留原有Deque判断逻辑的同时,让函数返回“是否为回文”和“中间字符”两个结果。
  3. 输出结果:遍历字典,对每个归一化字符串做回文判断,若是回文则输出对应的原始短语和中间字符。

完整代码示例

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 22:47:25