题解 | #密码截取#
密码截取
https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1
#include<iostream>
#include<string.h>
#include<algorithm>
int nicestr(char *s,char c,int i,int n);
using namespace std;
int main(){
char s[2502];
fgets(s,2502,stdin);int n=strlen(s)-1;
// cout<<nicestr(s,'A',n-1,n);
int dp[n];dp[0]=1;int maxnum=dp[0];
for(int i=1;i<n;i++){
int flag=nicestr(s,s[i-1],i-1,dp[i-1]);
if(flag==1&&s[i]==s[i-1]){
dp[i]=dp[i-1]+1;
}else if(s[i]==s[i-dp[i-1]-1])dp[i]=dp[i-1]+2;
else{
if(s[i-1]==s[i])dp[i]=2;
else dp[i]=1;
}
maxnum=max(maxnum,dp[i]);
}
cout<<maxnum;
}
int nicestr(char *s,char c,int i,int n){
int flag=1;
while(n>0){
if(s[i--]!=c){
flag=0;break;
}
n--;
}
return flag;
}
#include<string.h>
#include<algorithm>
int nicestr(char *s,char c,int i,int n);
using namespace std;
int main(){
char s[2502];
fgets(s,2502,stdin);int n=strlen(s)-1;
// cout<<nicestr(s,'A',n-1,n);
int dp[n];dp[0]=1;int maxnum=dp[0];
for(int i=1;i<n;i++){
int flag=nicestr(s,s[i-1],i-1,dp[i-1]);
if(flag==1&&s[i]==s[i-1]){
dp[i]=dp[i-1]+1;
}else if(s[i]==s[i-dp[i-1]-1])dp[i]=dp[i-1]+2;
else{
if(s[i-1]==s[i])dp[i]=2;
else dp[i]=1;
}
maxnum=max(maxnum,dp[i]);
}
cout<<maxnum;
}
int nicestr(char *s,char c,int i,int n){
int flag=1;
while(n>0){
if(s[i--]!=c){
flag=0;break;
}
n--;
}
return flag;
}