题解 | #密码截取#
密码截取
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")