题解 | 最长回文子串

最长回文子串

https://www.nowcoder.com/practice/b4525d1d84934cf280439aeecc36f4af

#include <ios>
#include <vector>
#include <string>
using namespace std;

class Solution {
public:
    int getLongestPalindrome(string A) {
        int n = A.size();
        vector<int> dp(n, 1);
        int result = 1;
        
        // 初始化前两位
        if(A[0] == A[1]){
            dp[1] = 2;
            result = 2;
        }
        
        for(int i = 1; i < n-1; i++){
            int j = i - dp[i] + 1;
            for(int k = max(j-1, 0); k <= i+1; k++){
                if(A[k] == A[i+1]){
                    int left = k;
                    int right = i+1;
                    // 验证回文
                    while(left < right && A[left] == A[right]){
                        left++;
                        right--;
                    }
                    // 验证通过,更新长度
                    if(left >= right){
                        dp[i+1] = i + 2 - k;
                        break; // 找到最优解,退出内层循环
                    }
                }
            }
            // 更新最大长度
            if(dp[i+1] > result)
                result = dp[i+1];
        }
        return result;
    }
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务