LeetCode 5:Longest Palindromic Substring(最长回文串)


Given a stringS, find the longest palindromic substring inS. You may assume that the maximum length ofSis 1000, and there exists one unique longest palindromic substring.

思路一:(超时)简单的截取长度为length(length递减)的字串,判断其是否为回文串。第一个满足要求的回文串最长。

public class Solution {
    public String longestPalindrome(String s) {
        int m=s.length();
        String ans=null;
        if(m==0)
        return s;
        if(m==1)
        return s;
        
        for(int length=m;length>=0;length--){
            for(int i=0;i+length-1<m;i++){
                ans=s.substring(i,i+length-1);
                if(isPalindromic(ans))
                return ans;
            }
            
        }
        return ans;
        
    }
    
     public static boolean isPalindromic(String l){
            int k=l.length();
            for(int i=0;i<k/2;i++){
                if(l.charAt(i)!=l.charAt(k-1-i))
                return false;
            }
            return true;
        }
}
View Code

思路二:动态规划。dp[i][j]=true when dp[i+1][j-1]=true&&s.charAt(i)==s.charAt(j);

public class Solution {
    public String longestPalindrome(String s) {
       int n = s.length();  
       int start = 0;  
       int maxLength = 1;  
       boolean dp[][] = new boolean[n+1][n+1];  
  for (int i = 0; i < n; i++) {  
    dp[i][i] = true;  
  }  
  for (int i = 0; i < n-1; i++) {  
    if (s.charAt(i) == s.charAt(i+1)) {  
      dp[i][i+1] = true;  
      start = i;  
      maxLength = 2;  
    }  
  }  
  for (int len = 3; len <= n; len++) {  
    for (int i = 0; i < n-len+1; i++) {  
      int j = i+len-1;  
      if (s.charAt(i) == s.charAt(j)&& dp[i+1][j-1]) {  
        dp[i][j] = true;  
        start = i;  
        maxLength = len;  
      }  
    }  
  }  
  return s.substring(start, start+maxLength);  
        
    }
    
    
}
View Code

思路三:http://articles.leetcode.com/2011/11/longest-palindromic-substring-part-ii.html这个方法效率最高,现在的水平还想不出这样的方法。

优质内容筛选与推荐>>
1、3+再议get与post区别(nagle+delayed ack)
2、Word在安装mathtype后出现的宏禁用问题
3、[Guava官方文档翻译] 3. 前置条件检查(Preconditions Explained)
4、Windows下配置jar环境
5、ASP.NET 2.0 中收集的小功能点


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn