题解 | #密码截取#
密码截取
https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1
#include <iostream> #include <vector> using namespace std; bool is_huiwen(string s){ int n = s.size(); for(int i = 0;i < n/2;i++){ if(s[i] != s[n-i-1]){ return false; } } return true; } int main() { string s; cin >> s; int n = s.size(); vector<int> dp(n); dp[0] = 1; int max_l = dp[0]; for(int i = 1;i < n;i++){ if(i - dp[i-1] - 1 >= 0 && s[i] == s[i - dp[i-1] - 1]){ dp[i] = dp[i-1]+2; }else{ for(int j = i-dp[i-1];j <= i;j++){ if(s[j] == s[i] && is_huiwen(s.substr(j,i-j+1))){ dp[i] = i-j+1; break; } } } max_l = max(max_l,dp[i]); } cout << max_l; } // 64 位输出请用 printf("%lld")