首页 > 其他分享 >5. 最长回文子串

5. 最长回文子串

时间:2023-09-26 14:32:25浏览次数:28  
标签:子串 res && 字符串 回文 最长 size


https://leetcode.cn/problems/longest-palindromic-substring/description/

前置知识

取字符串的子串

s.substr(start,len);
// start是子串的起始位置,从0开始,len是子串的长度

思路

枚举回文字符串的中间位置i,如果回文字符串的长度为奇数,则从左右i-1,i+1两个方向遍历字符串,判断是否满足两者字符相等的情况。如果是偶数,则从i,i+1遍历字符串即可,判断是否满足两者字符相等的情况。

需要注意的是,有效回文字符串的区间为[l+1, r-1],因为当两者不相等的时候已经进行了一次运算,而给定区间[l, r],其长度为r - l + 1


代码

class Solution {
public:
    string longestPalindrome(string s) {
        string res;

        // 遍历中心点
        for (int i = 0; i < s.size(); i ++){
            // 回文字符串长度为奇数
            int l = i - 1, r = i + 1;
            while(l >= 0 && r < s.size() && s[l] == s[r]){
                l --;
                r ++;
            }
            if (res.size() < (r - l - 1)) res = s.substr(l + 1, r - l - 1);

            // 回文字符串长度为偶数
            l = i, r = i + 1;
            while(l >= 0 && r < s.size() && s[l] == s[r]){
                l --;
                r ++;
            }
            if (res.size() < (r - l - 1)) res = s.substr(l + 1, r - l - 1);

        }

        return res;
    }
};


标签:子串,res,&&,字符串,回文,最长,size
From: https://blog.51cto.com/u_14608932/7608479

相关文章

  • 力扣刷题笔记-05 最长回文子串
    05最长回文子串半山腰有点拥挤,你要去山顶看看。中心扩展法什么是回文从左边出发,字符的顺序和从右边出发是一样的,比如aba,abba。那么基于这个理论,我们就可以想到解决方案:找一个中心点,向两边出发,左右两边各移动一位,如果相同就证明是回文子串,不相同就停止,找下一个中心点中心点......
  • AcWing 896. 最长上升子序列 II
    题目给定一个长度为$N$的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数$N$。第二行包含$N$个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围$1≤N≤100000,−10^9≤数列中的数≤10^9$输入样例:73121856输出样例......
  • 32. 最长有效括号
    给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 示例1:输入:s="(()"输出:2解释:最长有效括号子串是"()"示例2:输入:s=")()())"输出:4解释:最长有效括号子串是"()()"示例3:输入:s=""输出:0 提示:0<=s.length<=3*104......
  • 编写一个接受两个字符串参数的脚本。脚本应检查第一个字符串是否包含第二个参数的子串
    方法一:#!/bin/bash#检查是否提供了足够的参数if[$#-ne2];thenecho"用法:$0<主字符串><子串>"exit1fi#从命令行参数中获取主字符串和子串main_string="$1"substring="$2"#检查主字符串是否包含子串if[[$main_string==*$substring*]];then......
  • 力扣14.最长公共前缀
    编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。 示例1:输入:strs=["flower","flow","flight"]输出:"fl" 示例2:输入:strs=["dog","racecar","car"]输出:""解释:输入不存在公共前缀。 ......
  • Python中最长的递增序列
    如何使用Python中的N平方法和二进制搜索法计算一个数组中最长的递增子序列。使用N平方法计算最长的递增子序列在Python社区中,有一个著名的问题是关于最长递增子序列的,在不同的面试中也会被问到。这是一个Leetcode,问题说:给定一个未排序的整数数组,找出该数组的最长递增子序列或子......
  • P2679 [NOIP2015 提高组] 子串
    注意\(A\)中取相同位置子串划分方式不同也算作不同的方案。令\(f_{i,j,l,0/1}\)表示\(A\)中前\(i\)个字符,取出\(l\)个子串,拼成了\(B\)中前\(j\)个字符,第\(i\)个字符取/不取的方案数。不取直接累加\(A\)中上一个字符的状态:\[f_{i,j,l,0}=f_{i-1,j,l,0}+f_{i-1......
  • Manacher——最快的找最长回文算法
    Manacher马拉车——Manacher算法解决的问题给定一串字符串str,求str内的最长回文子串,我们可以从最朴素的算法开始,逐渐深入Manacher算法。朴素穷举法一直枚举字符串str的子串,并判断子串是否为回文。这个时间复杂度直接到\(O(n^3)\)了,一般题目都会超时。中心扩散法作为一个回文......
  • 最长回文子串
    给你一个字符串 s,找到 s 中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入:s="cbbd"输出:"bb" classSolution{public:stringlongestPalindrome(strings......
  • AcWing 895. 最长上升子序列
    题目给定一个长度为$N$的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数$N$。第二行包含$N$个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围$1≤N≤1000,−10^9≤数列中的数≤10^9$输入样例:73121856输出样例:4......