悠悠碧波
对于一个字符串s。找到一个最长的字符串t,t满足以下条件:
它是s的前缀
它是s的后缀
除前缀和后缀外,它还在s中出现过至少一次。
思路
暴力破解 找到相同的字符串t,再在中间找t;
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
bool fun(string a,string b){//判断两个字符串是否相等
int m,n;
m=a.size();
n=b.size();
if(m!=n) return false;
for(int i=0;i<n;i++){
if(a[i]!=b[i]) return false;
}
return true;
}
int main(){
string s;
int i,j;
int n;
int result = 0;
cin>>s;
i = 0;
j =s.length();
for(int m=0;m<j/2;m++){
if(fun(s.substr(0,m),s.substr(j-m,m))){//找到s的相同的前后缀
for(int l=m+1;l<j-2*m;l++){
if(fun(s.substr(0,m),s.substr(l,m))){//判断前后缀在s中间段是否存在
n=m;
break;
}
}
}
}
cout<<s.substr(0,n)<<endl;
}


京公网安备 11010502036488号