(刚开始没写对后来改对了)
很可惜,,自己差一点点,,
就一点点了,,
但是真的想不出来了,,
唉
用的思路是一个一个试,然后试的过程中把当前最大的子串个数记下来,不断更新
当循环里j = l时会有一个点超时
for(int i=0; i<l; i++){
for(int j=l; j>1; j--){ //这里
b = a.substr(i,j);
c = b;
reverse(b.begin(),b.end());
}
}
自己测试了一下看到了超时的地方,取串的时候 i 已经变大了,所以相对应的地址可以减小
于是把 j = l - i
不超时了但是有一个点错了,,
for(int i=0; i<l; i++){
for(int j=l-i; j>1; j--){
b = a.substr(i,j);
c = b;
reverse(b.begin(),b.end());
}
}
等等,,,
啊哈哈哈哈哈
边写题解边有了思路
改对了!开心!
#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
string a, b, c, d;
int sum, ma;
int main(){
getline(cin,a);
int l = a.size();
for(int i=0; i<l; i++){
for(int j=l-i; j>=1; j--){
b = a.substr(i,j);
c = b;
//cout << b << " eee " << i << " " << j << endl;
reverse(b.begin(),b.end());
if(b == c) {
sum = b.size();
if(sum > ma)
ma = sum;
}
}
}
if(l == 1) printf("1");
else printf("%d",ma);
return 0;
}
看大佬们用了动规什么的,,觉得难就自己尝试写了
过了,泣不成声。。。