手撕代码:最长回文子串

 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 }

 

posted @ 2019-09-18 15:57  知了会爬树  阅读(284)  评论(0编辑  收藏  举报