面试题 01.04. 回文排列
给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。
回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。
回文串不一定是字典当中的单词。
示例:
输入:tact coa
输出:True(排列有"taco cat"、"atco cta",等等)
思路
用哈希表,如果字符出现奇数次的个数<=1, 则可以形成回文。(刚看到题目第一思路居然是全排列,然后回文判断,但必定超时,需要优化。测试用例字母大小写不可以变换)
class Solution {
public:
bool canPermutePalindrome(string s) {
bool hash[128];
fill(hash, hash+128,false);//初始化为false
for(int i=0;i<s.length();i++){
hash[s[i]] = !hash[s[i]];
}
int count=0;//记录字符是奇数个的个数
for(int i=0;i<128;i++){
if(hash[i]) count++;
}
return count<=1?true: false;// 1?2:3,表示1为正返回2,否则返回3
}
};