leetcode-1044 最长重复子串
题干:
给出一个字符串 S,考虑其所有重复子串(S 的连续子串,出现两次或多次,可能会有重叠)。
返回任何具有最长可能长度的重复子串。(如果 S 不含重复子串,那么答案为 “”。)
举个例子
输入:"banana"
输出:"ana"
输入: "dfgdsfsfdfgj"
输出: "dfg"
思路:
首先想到的是循环,就是如何让相等的地方停下来,觉得稍微复杂一点的就需要思考一番。然后思路是 先用一个外层的循环,控制内层循环的对于外层循环的加数,这样就可以 对于循环而言 先控制加一 然后一直控制加到前一个和后一个是相等的情况出现,这个时候进入记录下来记录当前的值,然后比较大小得出最后的结果。
讲真的第一天没有写出来,想了好久如何实现,但就是有些地方没能够顺下来,就第二天时候,感觉差不多了,加上看了一个大佬的答案,觉得和我思路很相似,就记录了下来。
此代码原地址
public static String maxString(String str) {
if (str==null||str.length()==0) {
return "";
}
// 记录一些初值 max表示最大相差多少,first表示对于找到记录以后开始进行输出的位置初始地方。
int k=0;
int max=0;
int first=0;
for (int i = 1; i < str.length(); i++) {
//从当前位置开始,将相隔i 的重复的求出来!
for (int j = 0; j < str.length()-i; j++) {
if (str.charAt(j)==str.charAt(i+j)) {
k++;
}else {
k=0;
}
if (k>max) {
max=k;
first