一、题目
1.题目描述
二、解题报告
1.思路分析
- 根据ASCII对照表,我们可以知道所有的大小写字符都是以ASCII数字存储,那么所有字母-‘A’=相对数字位置,另其当作存储对应大小写字母的数组索引【对照表链接】
- 然后,开始遍历传入的字符串,当遇到对应字母时,相减得到对应索引进行++【计数操作】,从而实现字母与计数索引挂钩起来
- 最长回文串=所有奇数个字母的计数都减一+所有偶数计数+1或0【若无奇数,则加0;若有奇数,则加1;影响来源于是否有最中间的单一不配对的数】
2.代码详解
C++👇
class Solution {
public:
int longestPalindrome(string s) {
int a[200]={0};
int b=0;
int c=0;
for (int t1=0;t1<s.length();t1++){
a[s[t1]-'A']++;
// printf("%d",a[2]);
}
for (int t2=0;t2<200;t2++){
if(a[t2]%2!=0){
c=1;
b=b+a[t2]-1;
}else{
b=b+a[t2];
}
}
b=b+c;
return b;
}
};
3.注意事项C++
- 取模操作是%
- 注意整体总数为偶数情况
- 字符串的长度获取可以用length();eg:s.length()