1. 题目背景与核心考察点
第一次看到这个题目时,很多人的第一反应是"这太简单了吧"。确实,判断一个字符串是否可以排列成回文,表面看起来只需要统计字符出现次数即可。但正是这种看似简单的题目,最能检验开发者对基础数据结构的掌握程度和算法思维的严谨性。
回文(Palindrome)是指正读反读都相同的字符串,比如"madam"、"racecar"。而"回文排列"问题则是判断给定字符串的字符能否通过重新排列组合形成回文。这在实际开发中有诸多应用场景,比如:
- 文本编辑器的拼写检查功能
- DNA序列分析中的回文识别
- 游戏开发中的文字谜题生成
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 问题分析与解法思路
2.1 基础解法:字符频率统计
最直观的解法是统计每个字符出现的频率:
- 创建一个哈希表(或字典)记录字符出现次数
- 遍历字符串,统计各字符频率
- 检查频率统计结果:
- 如果字符串长度为偶数,所有字符频率必须都是偶数
- 如果长度为奇数,只能有一个字符的频率是奇数
python复制def canPermutePalindrome(s: str) -> bool:
freq = {}
for char in s:
freq[char] = freq.get(char, 0) + 1
odd_count = 0
for count in freq.values():
if count % 2 != 0:
odd_count += 1
if odd_count > 1:
return False
return True
2.2 优化解法:使用集合
更聪明的做法是利用集合的特性:
- 初始化一个空集合
- 遍历字符串中的每个字符:
- 如果字符在集合中,移除它
- 如果不在,添加它
- 最后检查集合大小:
- 长度≤1时可以形成回文
python复制def canPermutePalindrome(s: str) -> bool:
char_set = set()
for char in s:
if char in char_
