题解 | #密码截取#
密码截取
https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1
#include <iostream> #include <string> using namespace std; //以i和i+1为中心向左右进行双指针延拓 int huiwen(const string& s,int l,int r){ while(l>=0&&r<s.size()&&s[l]==s[r]){ --l;++r; } return r-l-1; } int main() { string str; cin >> str; int n=str.size(); int result=0; for(int i=0;i<n;++i){ result=max(result,huiwen(str,i,i)); result=max(result,huiwen(str,i,i+1)); } cout << result; } // 64 位输出请用 printf("%lld")
#include <iostream> #include <string> #include <vector> using namespace std; int main() { string s; cin >> s; int n=s.size(); int result=0; vector<vector<int>> dp(n,vector<int>(n,0)); for(int i=0;i<n;++i) dp[i][i]=1; for(int i=n-2;i>=0;--i){ for(int j=i+1;j<n;++j){ if(j-i>=2){ if(dp[i+1][j-1]&&s[i]==s[j]) dp[i][j]=2+dp[i+1][j-1]; } else if(s[i]==s[j]) dp[i][j]=2; result=max(result,dp[i][j]); } } cout << result; } // 64 位输出请用 printf("%lld")