题解 | #最长回文子串#

最长回文子串

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

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param A string字符串 
     * @return int整型
     */
    int getLongestPalindrome(string A) {
        // write code here
        // Manacher 算法
        string t = "$#"; // 初始化新字符串,添加特殊字符避免边界检查
        for (char c : A) {
            t += c;
            t += '#';
        }
        t += '@'; // 结尾添加特殊字符

        int n = t.length();
        vector<int> p(n, 0);
        int c = 0, r = 0; // 当前回文串中心和右边界
        int maxLen = 0;

        for (int i = 1; i < n - 1; ++i) {
            p[i] = (r > i) ? min(r - i, p[2 * c - i]) : 0; // 初始扩展半径
            
            // 尝试扩展回文串
            while (t[i + 1 + p[i]] == t[i - 1 - p[i]]) {
                p[i]++;
            }
            
            // 更新中心和右边界
            if (i + p[i] > r) {
                c = i;
                r = i + p[i];
            }
            maxLen = max(maxLen, p[i]);
        }

        return maxLen;
    }
};

全部评论

相关推荐

想干测开的tomca...:这份简历是“大一新生硬凹资深后端”的典型反面教材,槽点离谱到能让面试官直接笑出声: ### 1. 「年龄+入学时间」和项目复杂度完全脱节,可信度直接归0 你2024年7月才入学(现在刚读了1年多),19岁的大一新生,能把Vue3+Spring Boot+ShardingSphere+K8s+AI这些技术全塞进两个项目里?别说实际开发,光把这些技术的文档看完都得半年——这不是“能力强”,是“把招聘JD里的技术词全抄过来造假”,明摆着没碰过实际代码
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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