zoukankan      html  css  js  c++  java
  • leetcode-longestPalindrome-java

    动态规划中比较简单的实现

    动态规划的原理:http://hawstein.com/posts/dp-novice-to-advanced.html,讲解的非常清楚

    这道题可以参考动态规划的原理,将status[i][j]的值表示为,字符串从i到j的子串是否为回文字符串,其递推公式为,如果s[i]=s[j],status[i][j]=status[i+1][j-1],否则status[i][j]=0;

    详细的说明和容易出的问题放在代码注释中:

     1     public String longestPalindrome(String s)
     2     {
     3 
     4         int length = s.length();
     5         if (length <= 1) {
     6             return s;
     7         }
     8         boolean[][] temp = new boolean[length][length];//注意是Boolean类型,一开始我用的int[][],超时,也不知道具体原因
     9         //初始化数组
    10         for (int i = 0; i < length; i++) {
    11             for (int j = 0; j < length; j++) {
    12                 if (i >= j) {//为什么要初始化为1?如果是s[3][4]的递推公式就要依赖s[4][3],在s[3]==s[4]的情况下,当然是=1的
    13                     temp[i][j] = true;
    14                 } else {
    15                     temp[i][j] = false;
    16                 }
    17             }
    18         }
    19 
    20         int i;
    21         int j = 1;
    22         int maxlen = 0;
    23         int ri=0;
    24         int rj=0;
    25         while (j < length) {
    26             i = j - 1;
    27 
    28             while (i >= 0) {
    29                 if (s.charAt(i) != s.charAt(j)) {
    30                     temp[i][j] = false;
    31 
    32                 } else {
    33                     temp[i][j] = temp[i + 1][j - 1];
    34                     if (temp[i][j] == true && (j - i + 1) > maxlen) {
    35                         ri=i;//记录下来坐标,最后再直接返回,因为substring很慢,不要总用
    36                         rj=j;
    37                         maxlen = j - i+ 1;
    38                     }
    39                 }
    40 
    41                 i--;
    42             }
    43             j++;
    44         }
    45         return s.substring(ri, rj+1);
    46     }
  • 相关阅读:
    最小的K个数
    数组中出现次数超过一半的数字
    符串的排列
    二叉搜索树与双向链表
    复杂链表的复制
    String,StringBuilder,StringBuffer
    二叉树中和为某一值的路径
    二叉搜索树的后序遍历序列
    Java单例模式
    222. Count Complete Tree Nodes
  • 原文地址:https://www.cnblogs.com/lance-/p/3570795.html
Copyright © 2011-2022 走看看