题解 | #密码截取#
密码截取
https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1
#include <iostream>
using namespace std;
int get_one_sub(string& s, int center) {
//cout<<"以"<<center<<"为中心计算";
int res = 1;
if (center == 0) {
//cout<<endl;
return res;
}
if (center == s.size() - 1) {
return res;
} else {
int l = center - 1;
int r = center + 1;
while (l >= 0 && r <= s.size() - 1) {
if (s[l] == s[r]) {
l--;
r++;
res += 2;
} else {
break;
}
}
//cout<<"结果为"<<res<<endl;
return res;
}
}
int get_two_sub(string& s, int l, int r) {
//cout<<"计算"<<l<<","<<r<<"结果为";
int res = 2;
l--;
r++;
while (l >= 0 && r <= s.size() - 1) {
if (s[l] == s[r]) {
l--;
r++;
res += 2;
} else {
break;
}
}
if (l == 0 || r == s.size() - 1) {
//cout<<res<<endl;
return res;
}
//cout<<res<<endl;
return res;
}
int main() {
string s;
cin>>s;
int res = 1;
for(int i = 0;i<=s.size()-2;i++){
if(s[i] == s[i+1]){
res = max(max(get_one_sub(s,i),get_two_sub(s, i, i+1)),res);
}else {
res = max(res,get_one_sub(s, i));
}
}
cout<<res;
res = 1;
}
// 64 位输出请用 printf("%lld")