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

    此博客链接:https://www.cnblogs.com/ping2yingshi/p/14347689.html

    最长回文串

    题目链接:https://leetcode-cn.com/problems/longest-palindromic-substring/

    题目

    给你一个字符串 s,找到 s 中最长的回文子串。

    示例 1:

    输入:s = "babad"
    输出:"bab"
    解释:"aba" 同样是符合题意的答案。
    示例 2:

    输入:s = "cbbd"
    输出:"bb"
    示例 3:

    输入:s = "a"
    输出:"a"
    示例 4:

    输入:s = "ac"
    输出:"a"

    题解

     利用动态规划,先给所有的回文串标识为false,当确定为回文数时,标识为true,然后判断回文字符串最大的是哪个。

    代码

    class Solution {
        public String longestPalindrome(String s) {
        int len=s.length();
        if(len==1)
        {
            return s;
        }
        String result=s.charAt(0)+"";
        boolean [][] bool=new boolean[len][len];
        for(int i=0;i<len;i++)
        {
            bool[i][i]=true;
        }
        for(int i=len-1;i>=0;i--)
        {
            for(int j=i+1;j<len;j++)
            {
                if(s.charAt(i)==s.charAt(j))
                {
                    if(j-i==1)
                       {
                           bool[i][j]=true;
                       }
                       else
                       {
                           bool[i][j]=bool[i+1][j-1];
                       }
                }
                else{
                    bool[i][j]=false;
                }
                if(bool[i][j]==true)
                {
                     String temp=s.substring(i,j);
                     if(result.length()<temp.length())
                     {
                         result=temp;
                     }
                }
            }
        }
        return result;
        }
    }

    正确代码

    和上面错误代码比较,substring函数的第一个参数是开始下标,但是结束时,不包括结束下标的的字母,所以在写结束字符下标时,需要加1。

    class Solution {
        public String longestPalindrome(String s) {
        int len=s.length();
        if(len==1)
        {
            return s;
        }
        String result=s.charAt(0)+"";
        boolean [][] bool=new boolean[len][len];
        for(int i=0;i<len;i++)
        {
            bool[i][i]=true;
        }
        for(int i=len-1;i>=0;i--)
        {
            for(int j=i+1;j<len;j++)
            {
                if(s.charAt(i)==s.charAt(j))
                {
                    if(j-i==1)
                       {
                           bool[i][j]=true;
                       }
                       else
                       {
                           bool[i][j]=bool[i+1][j-1];
                       }
                }
                else{
                    bool[i][j]=false;
                }
                if(bool[i][j]==true)
                {
                     String temp=s.substring(i,j+1);
                     if(result.length()<temp.length())
                     {
                         result=temp;
                     }
                }
            }
        }
        return result;
        }
    }

    结果

     

     正确结果

    出来混总是要还的
  • 相关阅读:
    c# ThreadPool 判断子线程全部执行完毕的四种方法
    很多人都爱玩的lol..
    Go 的位操作
    wrk压测工具
    Go函数作为值与类型
    家用PC发展设想
    开车的烦恼
    一款一体机的设想
    nodejs开发环境的搭建
    Python网页抓取程序(续)
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/14347689.html
Copyright © 2011-2022 走看看