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; }
名企高频面试算法题解 文章被收录于专栏
牛客题霸 - 程序员面试高频题 - 题解