• leetcode 5. Longest Palindromic Substring


    题目内容

    Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

    Example:
    Input: "babad"
    Output: "bab"
    Note: "aba" is also a valid answer.
    Example 2:
    
    Input: "cbbd"
    Output: "bb"
    

    分析过程

    • 题目归类:
      array,dp
    • 题目分析:
      这种题应该是dp的解法,但是我还不是很会,就用非dp的解法实现第一个
      令 i= 0~ s.length()-1; j=i或者i+1,然后递归找相等的内容,把相等的保存下来。ij依次向外扩展,比较大小修改输出的string;
    • 边界分析:
      • 空值分析
      • 循环边界分析
    • 方法分析:
      • 数据结构分析
      • 状态机
      • 状态转移方程
      • 最优解
    • 测试用例构建

    代码实现

    class Solution {
        String sum = "";
        public String longestPalindrome(String s) {
            if(s==null || s.length() <2 )
                return s;
            for(int i = 0; i < s.length(); i++) {
                Palindrome(i,i+1,s);
                Palindrome(i,i,s);
            }
            return sum;
        }
        public void Palindrome(int m, int n, String s){
            if(m<0 || n>=s.length()||s.charAt(m)!=s.charAt(n)){
                return;
            }
            while(m>=0&&n<s.length()&&s.charAt(m) == s.charAt(n)){
                m--;
                n++;
            }
            sum = (sum.length()>=n-m-1)?sum:s.substring(m+1,n);
        }
    }
    
    

    效率提高

    dp的方式 效率没有递归的方式快。

    class Solution {
        public String longestPalindrome(String s) {
            
            if(s==null||s.length()<2){
                return s;
            }
            String ref = null;
            int length = s.length();
            boolean dp[][] = new boolean[length][length];
            for(int i = length-1; i>=0;i--){
                for(int j = i; j< length ; j++){
                    dp[i][j] = s.charAt(i)==s.charAt(j)&&(j-i<3||dp[i+1][j-1]);//这个j-i<3是三个数时,a,aa,aba这三种情况可以不用判断dp[i+1][j-1]
                    if(dp[i][j]&&(ref==null||ref.length()<j-i+1))
                        ref = s.substring(i,j+1);
                }
            }
            return ref;
        }
    }
    

    拓展问题

    Shortest Palindrome Hard
    Palindrome Permutation Easy
    Palindrome Pairs Hard
    Longest Palindromic Subsequence Medium
    Palindromic Substrings Medium

  • 相关阅读:
    20150603_Andriod 多个窗体数据回调
    onActivityResult传值的使用
    20150602_Andriod 向窗体传递参数
    20150601_Andriod 打开新窗体
    C# 添加.DLL 出错的解决方法
    c# 中crystal report输出PDF文件
    参考_Android中,如何新建一个界面,并且实现从当前界面切换到到刚才新建的(另外一个)界面
    andriod 新建 Activity_ Form (详细设置)
    sql in
    如何取得GridView被隐藏列的值
  • 原文地址:https://www.cnblogs.com/clnsx/p/12286774.html
Copyright © 2020-2023  润新知