zoukankan      html  css  js  c++  java
  • leetcode5。Longest Palindromic Substring

     写了一个爆搜,超时了,所以更改了一个方法,使用flag数组记录标志,

    动态规划,类似于lcs的解法,数组flag[i][j]记录s从i到j是不是回文

    首先初始化,i>=j时,flag[i][j]=true,这是因为s[i][i]是单字符的回文,当i>j时,为true,是因为有可能出现flag[2][1]这种情况,比如bcaa,当计算s从2到3的时候,s[2]==s[3],这时就要计算s[2+1] ?= s[3-1],总的来说,当i>j时置为true,就是为了考虑j=i+1这种情况。

    接着比较s[i] = s[j],如果成立,那么flag[i][j] = flag[i+1][j-1],否则直接flag[i][j]=false

    public class Solution {
        public String longestPalindrome(String s) {
            
            
            int n = s.length();
            int max = 0,st = 0,end = 0;
            boolean [][]flag = new boolean[n][n];
            for(int i = 0; i < n; i++)
            {
                for(int j = 0; j < n; j++)
                {
                    if(i < j)
                    flag[i][j] = false;
                    else
                    flag[i][j] = true;
                }
            }
            
            for(int i = 1; i < n;i++)
            {
                for(int j = 0; j < i; j++ )
                {
                    if(s.charAt(i) == s.charAt(j))
                    {
                        flag[j][i] = flag[j+1][i-1];
                        if(flag[j][i] == true && i - j + 1 > max)
                        {
                            max = i-j+1;
                            st = j;
                            end = i;
                        }
                    }
                    else
                    flag[j][i] = false;
                }
            }
            
            return s.substring(st,end+1);
            
        }
    }

    不知怎么的,leetcode上提交第一次的时候,又是显示超时,但是又提交了一次后,显示通过了。(meng)。

  • 相关阅读:
    Apollo 配置中心
    Sentinel 限流
    soul 网关
    xxl-job 任务管理
    java Young GC排查
    bitmap(位图)
    RabbitMQ一个简单可靠的方案(.Net Core实现)
    从技术角度讨论微服务
    你可能不知道的.Net Core Configuration
    浅谈开发模式及架构发展
  • 原文地址:https://www.cnblogs.com/zyqBlog/p/5927819.html
Copyright © 2011-2022 走看看