如何用Python找出回文中缺失的字符?
找出回文中缺失字符的Python实现
针对需求,这里提供两种实用的实现方法,对应你推测的思路:
方法一:统计字符出现次数(集合差集思路延伸)
回文字符串的核心特性是:每个字符的出现次数要么是偶数,要么仅存在一个出现奇数次的字符(当字符串长度为奇数时,该字符是回文的中心)。我们可以通过统计每个字符的出现次数,找到那个唯一出现奇数次的字符,就是缺失的回文组成字符。
from collections import Counter def find_missing_char(s): char_counts = Counter(s) for char, count in char_counts.items(): if count % 2 != 0: return char return "" # 输入符合回文缺失单个字符的情况不会触发此返回 # 测试示例 input_str = "abcdeedba" print(find_missing_char(input_str)) # 输出: c
方法二:拆分字符串对称对比
利用回文的对称性,将字符串拆分为前后两部分,把后半部分反转后和前半部分对比,通过字符计数的差异找到缺失的字符。如果字符串长度为奇数,先跳过中间的字符(因为它本就不需要成对)。
from collections import Counter def find_missing_char_by_split(s): length = len(s) half_len = length // 2 first_half = s[:half_len] # 跳过中间字符,取后半部分并反转 second_half_reversed = s[half_len + (length % 2):][::-1] count_first = Counter(first_half) count_second = Counter(second_half_reversed) # 对比计数,找出差异字符 for char in count_first: if count_first[char] != count_second.get(char, 0): return char # 兜底检查后半部分的独有字符(正常场景下不会走到这) for char in count_second: if count_second[char] != count_first.get(char, 0): return char return "" # 测试示例 input_str = "abcdeedba" print(find_missing_char_by_split(input_str)) # 输出: c
两种方法的适用场景:
- 方法一逻辑简单,无需依赖字符串的对称结构,只要输入是“仅缺失一个字符的回文”就有效;
- 方法二更贴合回文的对称特性,适合字符串本身接近对称排列的场景。
内容的提问来源于stack exchange,提问作者Praga desh
相关产品推荐
相关产品推荐

