409. 最长回文串(简单)
方法:哈希表 + 贪心
思路
- 不难发现,回文字符串一定是由 若干偶数个字符 + 至多一个奇数个字符 组成 。
- 我们可以使用一个长度为 128 的 hash表来记录每一个字符的出现次数,当该字符出现了两次,它一定能作为最大长度的回文子串的一部分,因此将 ans += 2,并将其赋值为 0。
- 在完成对 s 的遍历后,我们需要检查 hash表中是否还有次数为 1 的字符,它可以作为回文子串的中心,如果有的话,最大长度 + 1 。
代码
class Solution {
public:int longestPalindrome(string s) {vector<char> hashTable(128);int ans = 0;for(char ch : s) {hashTable[ch]++;// 该字符出现了两次,一定可以放在回文子串的两边if(hashTable[ch] == 2) {ans += 2;hashTable[ch] = 0;}}for(char h : hashTable) {if(h == 1) {ans += 1;break;}}return ans;}
};