给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。回文串不一定是字典当中的单词。
示例1:
输入:"tactcoa" 输出:true(排列有"tacocat"、"atcocta",等等)
----------------------------------------------------------------------------------------------------------------
1, 做题要举一反三,这道题可以使用哈希表解决,实质上跟我昨天的那个 “判定是否互为字符重排” 的思想是一模一样的;只不过要增加一点判断,何为回文,也就是如果这个字符串是回文串,那么最后哈希表的键值只可能有两种情况:
1. 哈希表的键值全部都为0;
2. 哈希表中只有一个键值为1,其余全部为0;
本题中,我们可以只关心键值为1的数量,至于那个为1,在本题中意义不大;
class Solution {
public:
bool canPermutePalindrome(string s) {
unordered_map<char, int>map;
for(int i = 0; i<s.length(); i++){
if(map.find(s[i]) != map.end()){
map[s[i]]--;
}else{
map[s[i]]+=1;
}
}
unordered_map<char, int>::iterator it;
int num = 0;
for(it = map.begin(); it!= map.end(); it++){
if(it->second != 0){
num+=1;
}
}
if (num>1)
return false;
else
return true;
}
};