zoukankan      html  css  js  c++  java
  • 动态规划 最长回文子串

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

    Example 1:

    Input: "babad"
    Output: "bab"
    Note: "aba" is also a valid answer.
    

    Example 2:

    Input: "cbbd"
    Output: "bb"



    public static String longestPalindrome(String s) {
            int n = s.length();
            if(n==0 || s==null)
                return s;
            String reString = null;
            boolean[][] dp = new boolean[n][n];
            for(int i = n-1;i >= 0; i--) {
                for(int j = i; j < n; j++) {
                    dp[i][j] = s.charAt(i)==s.charAt(j)&&(j-i<3 || dp[i+1][j-1]);    //判断是否为回文串
                    if(dp[i][j] && (reString==null || reString.length()<j-i+1))   //判断这个回文串的长度是否大于最长长度
                        reString = s.substring(i,j+1);
                }
            }
            return reString;
        }

    使用boolean创建一个二维数组dp[][],dp[i][j]的值代表从第i个字符到第j个字符的字符串是否为回文串。

    首先判定一个字符串是回文串有什么特点,如果dp[i][j]是回文串,那么dp[i+1][j-1]也是回文串,由此我们可以得出:

     dp[i][j] = s.charAt(i)==s.charAt(j)&&(j-i<3 || dp[i+1][j-1])
  • 相关阅读:
    关于iOS中页面启动加载的相关问题汇总
    文件上传与解析漏洞
    XSS跨站攻击
    SQL注入
    DOS&&Linux命令大全
    信息收集相关
    进制转化
    PYQT5 in Python
    将博客搬至CSDN
    Python报文操作模块scapy
  • 原文地址:https://www.cnblogs.com/tiandiou/p/9679396.html
Copyright © 2011-2022 走看看