409最长回文串给定一个包含大写字母

409最长回文串

给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。

在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。

注意:
假设字符串的长度不会超过 1010。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int num[55] = {0};

//int num[55] = {}; 定义一个55的数组,初始化为该类型的默认值(0)
//int num[55] = {0}; 效果同上
//int num[55] = {1}; 定义一个55的数组,初始化num[0]为1,其他为默认值(0)
for (int i = 0; i < s.length(); ++i) { //数出每个字母的个数
if (islower(s[i])) {
num[s[i] - 'a']++;
} else {
num[s[i] - 'A' + 26] ++;
}
}
int len = 0;
bool flag = false;
for (int i = 0; i <= 51; ++i) {
if (num[i] & 1) { //奇数可以用num[i]-1个来构成回文
len += num[i] - 1;
flag = true; //如果有奇数出现,先加偶数个,最后加一个放到中间,依然是回文
} else {
len += num[i];
}
}
return flag ? len + 1 : len;