题目:
面试题 01.04. 回文排列。
给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。
回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。
回文串不一定是字典当中的单词。
链接:https://leetcode-cn.com/problems/palindrome-permutation-lcci
示例:
输入:“tactcoa”
输出:true(排列有"tacocat"、“atcocta”,等等)
思路:
由回文子串的特点可知,其字符串内最多只有一个数量为单数的字符,所以利用这点统计各字符的次数,最后判断并输出。
代码:
class Solution:
def canPermutePalindrome(self, s: str) -> bool:
s_dict = {}
for _ in s:
if _ not in s_dict or s_dict[_] == 0:
s_dict[_] = 1
else:
s_dict[_] -= 1
if len([val for val in s_dict.values() if val]) > 1:
return False
else:
return True
时间复杂度O(n),空间复杂度O(n).