leetcode 266. 回文排列 easy
题目描述:
给定一个字符串,判断该字符串中是否可以通过重新排列组合,形成一个回文字符串。
示例 1:
输入: "code"
输出: false
示例 2:
输入: "aab"
输出: true
示例 3:
输入: "carerac"
输出: true
解题思路:
我们可以使用映射表(map)帮助我们统计字符串中每个字符出现的次数。映射表中的键(key)存放字符,值(value)存放字符出现的次数。
我们对字符串进行遍历,并得到字符串对应的映射表。随后遍历映射表,如果发现超过一个字符出现了奇数次,那么字符串就不可以组成一个回文串。下面的幻灯片给出了整个过程。
代码:
class Solution {
public:
bool canPermutePalindrome(string s) {
if(s.size()<2)
return 1;
unordered_map<char,int> dict;
for(int i=0;i<s.size();++i){
dict[s[i]]++;
}
int cnt=0;
for(auto &i:dict){
if(i.second &1) // 奇数 ++cnt
++cnt;
}
return cnt<2;
}
}