悠悠碧波

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