题目
输入一串长度为n的字符串(n<=100)
找到一串最长的子串,在该字符串中可以找到第二串一样的子串,字串长度加1就是答案
解法
n很小,枚举每个起点,往后找,如果有和它相同的字母,dfs看一下后面的字母相同吗,相同的话就接着往下找
代码
#include <iostream>
using namespace std;
char s[105];
int n, len, ans;
void dfs(int i, int j) {
if(j>=n) return ;
else {
if(s[i]==s[j]) {
len++;
dfs(i+1, j+1);
}
}
}
int main() {
cin >> n;
cin >> s;
for(int i=0; i<n-1; ++i) { //以s[i]为起点
for(int j=i+1; j<n; ++j) {//枚举后面的字符串,看看最多有几个相同
len = 0;//先设定相同的字符串长度为0
if(s[i]==s[j]) {
len++;
dfs(i+1, j+1);
}
if(len > ans) ans = len;//若最长的相同字符串长度比答案大, 更新
}
}
cout << ans+1;
return 0;
}