zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    nginx配置跨域问题
    几个经典的TCP通信函数
    表达格式和数值格式的转换
    主机字节序与网络字节序的转换
    一对经典的时间获取客户/服务器程序
    关于TIME_WAIT状态
    一个经典的比喻( 关于TCP连接API )
    《UNIX 网络编程 第二版》编译环境的搭建( 运行本专栏代码必读 )
    简述C++中的多态机制
    最佳谓词函数 --- 函数对象
  • 原文地址:https://www.cnblogs.com/clnsx/p/12286774.html
Copyright © 2011-2022 走看看