手撕代码:最长回文子串
1 int longgestSubStr(string ss) 2 { 3 int n=(int)ss.size(); 4 if(n==0) 5 return 0; 6 //申请内存 7 int **f=new int* [n]; 8 for(int i=0;i<n;++i) 9 { 10 f[i]=new int[n]; 11 } 12 int Max=1; 13 //初始化 14 for(int i=0;i<n;++i) 15 for(int j=0;j<n;++j) 16 f[i][j]=0; 17 18 for(int i=0;i<n;++i) 19 { 20 f[i][i]=1; 21 if(i<n-1&&ss[i]==s[i+1]) 22 { 23 f[i][i+1]=2; 24 } 25 } 26 //动态规划 27 for(int len=3;len<=n;len++) 28 { 29 for(int i=0;i<=n-len;i++) 30 { 31 int j=i+len-1; 32 if(ss[i]==ss[j]&&f[i+1][j-1]>0) 33 { 34 f[i][j]=max(f[i][j],f[i+1][j-1]+2); 35 } 36 if(f[i][j]>Max) 37 Max=f[i][j]; 38 } 39 } 40 return Max; 41 }