【LeetCode】409. 最长回文串

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;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_43894455/article/details/132558387