悠悠碧波
对于一个字符串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; }