题解 | #密码截取#
密码截取
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")
查看2道真题和解析