题解 | #密码截取#
密码截取
https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1
//超出内存限制的暴力递归,有没有啥办法呢……
#include<iostream>
#include<string.h>#include<algorithm>
#include<map>
#include<utility>
using namespace std;
map<pair<int,int>,int>map1;
int ism(char*s,int i,int j){//如果是一个密码就返回密码长度,如果不是就返回-1
int flag=0;int n=j-i+1;
while(i!=j){
if(s[i]==s[j]){
if((j-i)==1)break;
i++,j--;
}else {
flag=1;break;
}
}
if(flag){
map1[{i,j}]=-1;
return -1;
}
else {
map1[{i,j}]=n;
return n;
}
}
int f(char*s,int i,int j){
if(map1.find({i,j})!=map1.end()){
return map1[{i,j}];
}
if(ism(s,i,j)>0){
// map1[{i,j}]=ism(s,i,j);
return ism(s,i,j);
}
else{
return max(f(s,i+1,j),f(s,i,j-1));
}
}
int main(){
char s[2502];
fgets(s,2502,stdin);
cout<<f(s,0,strlen(s)-2);
}