文章目录
问题
409. 最长回文串
完整代码
#include <iostream>
using namespace std;
class Solution {
public:
int longestPalindrome(string s) {
int arr[150] = {0};
int maxLen = 0;
// int maxOdd = 0;
for (auto mem : s) { // 用数组arr统计一下字母出现的次数
arr[mem]++;
}
for (int i = 0; i < 150; i++) {
if (arr[i] % 2 == 0) { // 处理出现偶数次的
maxLen += arr[i];
arr[i] = 0;
}
// else maxOdd = max(maxOdd, arr[i])
else if (arr[i] > 1) { // 处理出现奇数次的
maxLen += arr[i] - 1;
arr[i] = 1;
}
}
for (int i = 0; i < 150; i++) { // 再检测一下是否含 单个奇数(可以放在回文串最中间)
if (arr[i]) {
return maxLen + 1;
}
}
return maxLen;
}
};
int main() {
string s;
Solution sol;
cin >> s;
cout << sol.longestPalindrome(s) << endl;
return 0;
}
小总结
写代码像写文章一样,提起笔,动动手,开始去做了,答案也就慢慢浮出水面了。行动起来吧!