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;
}



京公网安备 11010502036488号