zoukankan      html  css  js  c++  java
  • 【LeetCode】最长回文子串-中心扩展法

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

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

    【思路】判断一个字符串是不是回文字符串,一个很简单的思路就是从中间向两边依次展开判断对应位置是否相等,但题目是让求最长回文子串,那么我们遍历所有的字符,以每个字符为中心向两边拓展,就ok了,但是存在两种情况:

    1. "aba", 这种情况我们可以从中心一直向两边拓展,从而使回文子串

    2. "abba", 这种情况我们如果直接使用从中心拓展判断,就会出现错误,因此需要从两个相邻的数出发,同时向两边拓展,而不是仅仅从一个中心位置出发

    因此我们在遍历时,对于每个字符,都要考虑上面两种情况!

    • PalindromeCore(s, i, i);

    • PalindromeCore(s, i, i+1);

    注意:Coding时注意i, j的位置,正确计算好最大长度!

    class Solution {
    private:
        int left = 0, maxlen = 1;
    public:
        void PalindromeCore(string s, int i, int j){
            while(i >= 0 && j < s.length() && s[i] == s[j]){
                i--; j++;
            }
            if(maxlen < j-i-1){
                left = i+1;  // 由于上面跳出循环i自减了,j自加了
                maxlen = j-i-1;
            }
        }
    
        string longestPalindrome(string s) {
            if(s.length() < 2){
                return s;
            }
            for(int i = 0;i < s.length(); i++){
                PalindromeCore(s, i, i);
                PalindromeCore(s, i, i+1);
            }
            return s.substr(left, maxlen); 
            // substr实质从left位置开始数maxlen个字符构成的子串
        }
    
    };
  • 相关阅读:
    placeholder在ie浏览器里不显示的问题解决
    条件注释判断浏览器版本<!--[if lt IE 9]>
    在CSS中,BOX的Padding属性的数值赋予顺序为
    PhpStorm的注册码、Key
    关于【bootstrap modal 模态框弹出瞬间消失的问题】
    python 常见算法
    scrapy 爬虫基础
    python中的小知识点
    python 数据结构简介
    前端插件定制--表头和表内容
  • 原文地址:https://www.cnblogs.com/zhudingtop/p/11509100.html
Copyright © 2011-2022 走看看