E「水」悠悠碧波
思路:
暴力
枚举前缀和后缀
如果前后缀相等,就去字符串里(除开前后缀的位置)找还有没有和前后缀相等的字串
如果某一次找不到了,直接break
好像有bug,
本蒟弱只能写成这样,望大佬指教
#include <bits/stdc++.h> using namespace std; //判断b的转置是否和a相等 int check(string a,string b) { int n1 = a.size(); int n2 = b.size(); if(n1!=n2) return 0; for(int i=0;i<n1;i++) { if(a[i]!=b[n1-i-1]) return 0; } return 1; } int main() { std::ios::sync_with_stdio(false); string s; cin>>s; int n = s.size(); string x = ""; string ans = ""; string x2 = ""; for(int i=0;i<n;i++) { x+=s[i]; x2+=s[n-i-1]; //如果相等就去找 if(check(x,x2)) { //cout<<"x="<<x<<endl; string y=""; int flag = 0; for(int j=i+1;j<n-(int)x.size()+1;j++) { if(s[j]==x[0]) { int t = 0; //注意范围 while(j+t<n-(int)x.size()+1) { y+=s[j+t]; if(y==x) { ans = x; flag = 1; break; } else if(((int)y.size())>=((int)x.size())) { y = ""; break; } t++; } } if(flag) break; } //这个剪枝很重要,不写会超时 if(!flag) { break; } } } cout<<ans; return 0; }