zoukankan      html  css  js  c++  java
  • leetcode题目5.最长回文子串(中等)

    题目描述:

    给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

    示例 1:

    输入: "babad"
    输出: "bab"
    注意: "aba" 也是一个有效答案。
    示例 2:

    输入: "cbbd"
    输出: "bb"

    解法一:扩展中心,中心开花

    我们知道回文串一定是对称的,所以我们可以每次循环选择一个中心,进行左右扩展,判断左右字符是否相等即可。

                                                        

    由于存在奇数的字符串和偶数的字符串,所以我们需要从一个字符开始扩展,或者从两个字符之间开始扩展,所以总共有 n+n-1 个中心。

    class Solution {
        
       public static String longestPalindrome(String s) {
            if (s == null || s.length() == 0) {
                return "";
            }
            //记录回文串的开始位置
            int start = 0;
            //记录回文串的结束位置
            int end = 0;
            //记录中间得到的回文串的长度
            int maxLen = 0;
            for (int i = 0; i < s.length(); i++) {
                //从n+n-1个中心点开始向外扩展
                int len1 = getTheLengthOfPalindrome(s, i, i);
                int len2 = getTheLengthOfPalindrome(s, i, i + 1);
                maxLen = Math.max(len1, len2);
                if (maxLen > (end - start)) {
                    start = i - (maxLen - 1) / 2;
                    end = i + maxLen / 2;
                }
            }
            //此处注意:subString两个参数:start为回文串开始字符,end为回文串结束索引-1
            return s.substring(start, end+1);
        }
    
        private static int getTheLengthOfPalindrome(String s, int left, int right) {
    
            int L = left;
            int R = right;
            while (L >= 0 && R < s.length() && s.charAt(L) == s.charAt(R)) {
                L--;
                R++;
            }
            //扩展完的回文串的长度(R-1)-(L+1)+1,所以是R-1-L
            return R - 1 - L;
        }
    }

    复杂度分析:

    ~时间复杂度:O(n²)

    ~空间复杂度:O(1)

  • 相关阅读:
    一本通1273货币系统(方案数背包)
    背包体积循环正序和逆序的区别
    Python字典的底层原理和优缺点
    Linux各目录及每个目录的详细介绍
    openwrt 下python程序后台运行,并将打印信息保存文件
    pycharm同一目录下无法import其他文件
    python sqlite3学习笔记
    python sqlite3查询表记录
    Pycharm快捷键的使用
    Python3 Address already in use 解决方法
  • 原文地址:https://www.cnblogs.com/ysw-go/p/11420535.html
Copyright © 2011-2022 走看看