Description
求串的最长重复子串长度(子串不重叠)。例如:abcaefabcabc的最长重复子串是串abca,长度为4。
Input
测试次数t
t个测试串
Output
对每个测试串,输出最长重复子串长度,若没有重复子串,输出-1.
Sample
Input
3
abcaefabcabc
szu0123szu
szuabcefg
Output
4
3
-1
思路
步长从1开始截取字符串,在截取字符串的下一个位置开始进行匹配,因为步长是从小到大的,所以最后截取出来的字符串长度是最大的
代码
#include<iostream>
using namespace std;
int main(){
int t;cin>>t;
while(t--){
int len = -1;//默认没找到返回-1
string str;cin>>str;
for(int i = 1;i < str.size();i++)//步长
for(int j = 0;j < str.size();j++){
string tmp = str.substr(j, i);//从j开始截取步长为i的子串
if(str.find(tmp, j + i) != -1)//往后面开始找
len = i;
}
cout<<len<<endl;
}
return 0;
}