NC142:最长重复子串

最长重复子串

http://www.nowcoder.com/questionTerminal/4fe306a84f084c249e4afad5edf889cc

可以将两个字符串想像成两个连续的滑动窗口,并假设这个滑动窗口最大是字符串长度的一半,通过比较两个窗口的内容是否相同,不相同的时候不断从左向右平移,完了之后,还是不相同,这时候就将窗口的大小调小一点,直到找到一个相同的,这个时候窗口的长度×2就是最大字符串的大小

    public int solve (String a) {
        // write code here
        if (a == null || a.length() <= 1) return 0;
        char[] chars = a.toCharArray();
        int len = chars.length;
        int maxLen = chars.length / 2;
        for (int i = maxLen; i >= 1;--i){
            for (int j = 0; j <= len - 2 * i;++j){
                if (check(chars, j, i)) 
                    return 2 * i;
            }
        }
        return 0;
    }
    public boolean check(char[] chars, int start, int len){
        for (int i = start;i < start + len;++i){
            if (chars[i] != chars[i +len]) 
                  return false;
        }
        return true;
    }
名企高频面试算法题解 文章被收录于专栏

牛客题霸 - 程序员面试高频题 - 题解

全部评论
输入三个1,返回2,答案错误。
点赞 回复 分享
发布于 2021-06-24 23:56
复杂度O^3?
点赞 回复 分享
发布于 2021-08-01 12:46
cabab也是错误
点赞 回复 分享
发布于 2021-08-04 21:07

相关推荐

评论
14
3
分享
牛客网
牛客企业服务