zoukankan      html  css  js  c++  java
  • 5. 最长回文子串

    5. 最长回文子串

    package 动态规划;
    
    public class 最长回文子串 {
        public static void main(String[] args) {
            String s = "aaaa";
            最长回文子串 o = new 最长回文子串();
            System.out.println(o.longestPalindrome(s));
        }
    
    
        // 动态规划解法
        // 定义状态:dp[i][j]表示从i到j字符是回文串
        // 设置初始状态: j-i=0时候dp[i][j]=1,j-i=i时,若c[i]==c[j]时候dp[i][j]=1
        // 状态转移方程:dp[i+1][j-1]=1 && c[i]==c[j] 时候,dp[i][j]=1
        public String longestPalindrome(String s) {
            if (s == null || s.length() == 0 || s.length() == 1) {
                return s;
            }
            char[] c = s.toCharArray();
            int[][] dps = new int[s.length()][s.length()];
            int maxLength = 0;
            int start = 0;
            // 之所以先确定j的值在确定i的值,是因为二维数组的表格填表顺序决定的
            // 只有确定了上一个元素的值,才能推下一个元素的值
            for (int j = 0; j < dps.length; j++) {
                for (int i = 0; i < j; i++) {
                    if ((j - i) <= 2) {
                        if (c[i] == c[j]) {
                            dps[i][j] = 1;
                        }
                    } else {
                        if (dps[i + 1][j - 1] == 1 && c[i] == c[j]) {
                            dps[i][j] = 1;
                        }
                    }
                    if (dps[i][j] == 1) {
                        if (j - i + 1 > maxLength) {
                            maxLength = j - i + 1;
                            start = i;
                        }
                    }
                }
            }
            return s.substring(start, start + maxLength);
        }
    
    
    }

    ..

  • 相关阅读:
    第06组 Alpha冲刺(6/6)
    第06组 Alpha冲刺(5/6)
    总结
    Vmware centos7无法联网的问题解决
    网络爬虫--前世今生
    CVE-2018-4407 漏洞复现POC
    编码原理_base64编码原理
    短信验证码之验证码回显
    2018_10_21 22:42
    信息安全考研和就业的选择分析
  • 原文地址:https://www.cnblogs.com/guoyu1/p/15621589.html
Copyright © 2011-2022 走看看