<思路> 第一种写法就是用循环去找,也就是俗称的暴力解法。
另外一种就是用string类型中的find函数和substr函数去找。
方法1:
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s; cin>>s;
int len1 = s.length();
int cnt =0,ans=0;
for(int i=0;i<len1;i++){
for(int j=i+1;j<len1;j++){
if(s[i+cnt]==s[j]){
cnt++;
if(s[i+cnt]!=s[j+1]){
ans = max(cnt,ans);
cnt = 0;
}
}
}
}
cout<<ans<<endl;
}
方法2:
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s; cin>>s;
int len1 = s.length();
int cnt = 0;
for(int i=0;i<len1;i++){
for(int j=1;j<len1;j++){
if(s.find(s.substr(i,j),i+1)!=-1){
cnt = max(cnt,j);
}
else {
break;
}
}
}
cout<<cnt<<endl;
return 0;
}
substr用法:
形式:s.substr(pos, n)
返回一个string,包含s中从pos开始的n个字符的拷贝(pos的默认值是0,n的默认值是s.size() - pos,即不加参数会默认拷贝整个s)