题解 | #密码截取#
密码截取
http://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1
#include<stdio.h>
int f_max(int a, int b){ return a>b?a:b; }
int main(){ char data[2500]; scanf("%s", data); int lenth=0; for(; data[lenth] != '\0'; lenth++); intdp=(int)malloc(sizeof(int)lenth); for(int i=0; i<lenth; i++){ dp[i]=(int)malloc(sizeof(int)*lenth); for(int x=0; x<lenth; x++)dp[i][x]=1; } int mmax=1; for(int i=lenth-1; i>=0; i--){//i是左边界 for(int j=0; j<lenth; j++){ if(i>j){ dp[i][j]=0; } else if(i==j){ dp[i][j]=1; } else{ if(i+1==j && data[i] == data[j]){ dp[i][j]=2; mmax=f_max(mmax, dp[i][j]); } else{ if(data[i] == data[j] && dp[i+1][j-1]){ dp[i][j]=dp[i+1][j-1]+2; mmax=f_max(mmax, dp[i][j]); } else{ dp[i][j]=0; } }
}
}
}
printf("%d", mmax);
}