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

    题目:

    给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
    
    示例 1:
    输入: "babad"
    输出: "bab"
    注意: "aba" 也是一个有效答案。
    
    示例 2:
    输入: "cbbd"
    输出: "bb"
    
    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/longest-palindromic-substring
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    分析:

    很容易可以想到使用简单循环来处理,从第一个字符开始,依次遍历,然后判断每次循环得到的是否回文,取长度最长的输出,按照这种思路可以得到如下代码:

    public static String longestPalindrome(String s) {
            StringBuilder result = new StringBuilder();
            if ("".equals(s)) {
                return result.toString();
            }
            for (int i = 0; i < s.length(); i++) {
                StringBuilder temp = new StringBuilder();
                for (int j = i + 1; j <= s.length(); j++) {
                    temp.append(s.substring(j - 1,j));
                    if (temp.toString().equals(temp.reverse().toString())) {
                        if (temp.length() > result.length()) {
                            result.delete(0, result.length());
                            result.append(temp);
                        }
                    }
                    temp.reverse();
                }
            }
            return result.toString();
        }
    思路1

    但这种方式对于字符串过长时,耗时较长,因此是无法全部通过LeetCode的测试用例的,更换思路:

    使用中心拓展的方式去找回文数,相对来说时间可以缩短一半。但要注意奇偶数的处理!

    public static String longestPalindrome2(String s) {
            int n = s.length();
            String res = "";
            boolean[][] dp = new boolean[n][n];
            for (int i = 0; i < n; i++) {
                for (int j = i; j >= 0; j--) {
                    if (s.charAt(i) == s.charAt(j) && (i - j < 2 || dp[i - 1][j + 1]))
                        dp[i][j] = true;
                    if (dp[i][j] && (i - j + 1 > res.length())) {
                        res = s.substring(j, i + 1);
                    }
                }
            }
            return res;
        }
    思路2
  • 相关阅读:
    只要三步,使用html5+js实现像素风头像生成器
    按Ctrl+Enter发送的实现
    “放到桌面”的Servlet实现
    从tom大叔那想着拿书的,呵呵。
    也写dateUtil.js
    智习室
    零基础爬虫课,不会编程也能做爬虫
    1小时教你学会如何采集微博数据:0基础小白也能轻松学会!
    TransactionScope 分布式事务配置
    centos7创建共享文件夹
  • 原文地址:https://www.cnblogs.com/doona-jazen/p/11734768.html
Copyright © 2011-2022 走看看