文章目录
- 题目
- 思路
- 代码呈现
题目
链接: link
思路
关于这道题,比起一般的回文数题,这题的区别的在给定的字符中任意排序直至形成一个最长的回文数,而且题目中跟我们提到,这里的字符串中只会出现字母,我们只需区分大小写即可
所以我们可以这样思考,建立一个有52个int类型大小的数组,用来记录每个大小写字母出现的次数
最后判断每个数组里的元素是否为偶数,是偶数直接在回文数总长度上加上这个长度,奇数,则加上奇数后减一
需要注意的一点是,如果有单独出来的一个数,可以把它放在中间,为回文数的总长度加上一,但是仅只能一次
代码呈现
int longestPalindrome(char* s) {
int ch[52] = {0};
for (int i = 0; i < strlen(s); i++) {
if (s[i] >= 'A' && s[i] <= 'Z')
ch[s[i] - 'A']++;
else if (s[i] >= 'a' && s[i] <= 'z')
ch[s[i] - 'a' + 26]++;
}
int flag = 0;
int tmp = 0;
for (int i = 0; i < 52; i++) {
if (ch[i] % 2 == 0)
tmp += ch[i];
else if (ch[i] % 2 != 0) {
tmp += ch[i] - 1;
flag = 1;
}
}
return tmp + flag;
}