零、欸嘿!
英雄哥《算法零基础100讲》传送门
一、题目
力扣https://leetcode-cn.com/problems/palindrome-permutation-lcci/
二、解题
思路:要是回文的的话,单数,每个字母都有俩,剩下一个单在中间
双数,每个字母都要有俩,不可能出现剩下两个单的情况,所以只要判断数组里有几个字母是多余的就可以判断是不是回文了
bool canPermutePalindrome(char* s){
int has[300]; //定义一个数组,用已知数组的值当作这个数组的下标(往下看)
memset(has,0,sizeof(has)); //将数组初始化为0,memset(起点,要初始化的值,初始化的大小)
int sum=0;
int len=strlen(s);
for(int i=0;i<len;i++){
++has[s[i]]; //s[i]没有的has[s[i]]就还是0,有一个就是1,当有两个s[i]相等时,
has[s[i]]就会++两次变成2,以此类推
}
for(int i=0;i<299;i++){ //0-299是300个数
if(
(has[i]+2)%2){ //求余剩下单个的sum就加一,1%2=0,为了避免这种情况所以先加上2
sum++; 这个错误我找了半天
}
}
if(sum<=1) return true; //如果没有单个,或只有一个那就是true,
return false;
}
三、结果