题目描述:
给定一个字符串,判断该字符串中是否可以通过重新排列组合,形成一个回文字符串。
示例 1:
输入: “code”
输出: false
示例 2:
输入: “aab”
输出: true
示例 3:
输入: “carerac”
输出: true
方法1:使用数组对字符进行映射,统计数量分布
主要思路:
(1)使用字符串中的字符,作为数组的下标,辅助统计可以形成的回文的字符的对数;
(2)最后比较该字符对数和字符串长度关系,返回比较结果;
class Solution {
public:
bool canPermutePalindrome(string s) {
if(s.size()<2)
return true;
int sign[128]={0};//辅助统计字符串字符的分布情形
int res=0;
for(int i=0;i<s.size();++i){//遍历字符串的字符
if(sign[s[i]]){//若之前出现过,并没被统计到形成回文的字符对中
++res;//将字符对的数量加1
--sign[s[i]];//将该值重置为0,便于统计字符的下次出现的情况
}
else{
++sign[s[i]];//若没出现过,或之前已经都形成了字符对
}
}
return res==s.size()/2;//比较最终的可以形成的回文和字符串的长度关系
}
};