Palindrome Permutation
题目描述
Given a string, determine if a permutation of the string could form a palindrome.
For example,
"code" -> False, "aab" -> True, "carerac" -> True.
解题方法
这一题写出几个例子就会发现规律,因为是Permutation,所以characters都可以任意排列。
- 首先看这个string的长度是奇数还是偶数
- 如果是奇数,那必然是两边对称,中间有一个独特的character
- 如果是偶数,就应该是两边对称
- 然后数每个character出现的次数
- 如果长度是奇数,那么出了一个出现了奇数次的数外,其他的数都应该出现偶数次
- 如果长度是偶数,那么所有数都应该出现偶数次
优化,注意点
- 为了便于判断奇偶,我将所有的出现次数都 % 2
Solution
class Solution(object):
def canPermutePalindrome(self, s):
"""
:type s: str
:rtype: bool
"""
if len(s) == 0:
return True
dic = {}
for i in range(len(s)):
if s[i] not in dic:
dic[s[i]] = 1
else:
dic[s[i]] += 1
dic[s[i]] %= 2
foundOdd = 0
for key in dic:
if dic[key] == 1:
foundOdd += 1
if len(s) % 2 == 0:
if foundOdd != 0:
return False
else:
return True
else:
if foundOdd == 1:
return True
else:
return False