钻石王者B

B
class Solution
{
private:
    int next[1000010];
    //int next[2];
    void getNext(string p)
    {
        int len = p.size();
        next[0] = 0;
        int i = 0, j = 0;
        for (j = 1; j < len; j++)
        {                                 // i 代表最长前缀后缀长度
            while (p[i] != p[j] && i > 0) // 当p[i] != p[j] 时,减小最长前缀后缀长度
                i = next[i - 1];
            if (p[i] == p[j])
            {
                i++;         //最长公共前缀后缀长度+1
                next[j] = i; //匹配失败时跳到该处
            }
            else
                next[j] = 0;
        }
    }

public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 给定一个字符串s,返回具有相同前缀后缀的子串的第二大长度,反之,返回-1即可。
     * @param s string字符串 代表题意中的字符串s
     * @return int整型
     */
    int solve(string s)
    {
        // write code here
        getNext(s);
        int ans = next[s.size() - 1];
        if (!ans)
            ans = -1;
        return ans;
    }
};

全部评论
orz
8 回复 分享
发布于 2020-12-12 12:51

相关推荐

2024-12-23 10:55
已编辑
大连理工大学 Java
牛客930504082号:华子综测不好好填会挂的,而且填的时候要偏向牛马选项
点赞 评论 收藏
分享
2024-11-08 00:11
复旦大学 深度学习
喜欢走神的孤勇者练习时长两年半:池是池,发是发,我曾池,我现黑
点赞 评论 收藏
分享
评论
1
1
分享
牛客网
牛客企业服务