钻石王者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

相关推荐

1 1 评论
分享
牛客网
牛客企业服务