输出最长回文子串

给定一个字符串s,输出s中最长回文子串

 1 class Solution {
 2     public String longestPalindrome(String s) {
 3         if(s==null||s.length()<1){
 4             return "";
 5         }
 6         int len=s.length();
 7         int l=0;
 8         int left=0;
 9         int right=0;
10         int[][] a=new int[len][len];
11         for(int i=0;i<len;i++){
12             a[i][i]=1;
13         }
14         l=1;
15         left=0;
16         right=0;
17         for(int i=0;i<len-1;i++){
18             if(s.charAt(i)==s.charAt(i+1)){
19                 a[i][i+1]=1;
20                 l=2;
21                 left=i;
22                 right=i+1;
23             }
24         } 
25         for(int i=a.length-3;i>=0;i--){
26             for(int j=i+2;j<a[0].length;j++){
27                 if(a[i+1][j-1]==1&&s.charAt(i)==s.charAt(j)){
28                     a[i][j]=1;
29                 }
30                 if(a[i][j]==1&&j-i+1>l){
31                     l=j-i+1;
32                     left=i;
33                     right=j;
34                 }
35             }
36         }     
37         return s.substring(left,right+1);
38     }
39 }

反思:

1,对动态规划算法不熟悉。

2,没有考虑到s为空的情况。

3,在对动态规划算法填表时,对填表路径欠缺思考。

4,对二位数组定义不熟练。

5,此题最优算法是中心扩展算法。

猜你喜欢

转载自www.cnblogs.com/xiaoyaomianbiren/p/12175596.html