竞赛讨论区 > 钻石王者B
头像
LetMeFly
发布于 2020-12-11 21:53
+ 关注

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

全部评论

(1) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐