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

5. 最长回文子串

时间:2023-07-12 16:33:30浏览次数:33  
标签:子串 right string int size 回文 最长 dp left

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

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

示例 1:


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

> 动态规划


class Solution {
public:
    string longestPalindrome(string s) {
        int maxlenth = 0;
        int left = 0;
        int right = 0;
        vector<vector<int>> dp(s.size(),vector<int>(s.size(),1));
        for(int i = s.size()-1;i >= 0;i--){
            for(int j = s.size()-1;j > i;j--){
                if(s[i] == s[j]){
                    dp[i][j] = dp[i+1][j-1];
                }
                else{
                    dp[i][j] = 0;
                }
                if (dp[i][j] && j - i + 1 > maxlenth) {
                    maxlenth = j - i + 1;
                    left = i;
                    right = j;
                }
            }
        }
         return s.substr(left, right - left + 1);
    }
};

> 双指针


class Solution {
public:
    int left = 0;
    int right = 0;
    int maxLength = 0;
    string longestPalindrome(string s) {
        int result = 0;
        for (int i = 0; i < s.size(); i++) {
            extend(s, i, i, s.size()); // 以i为中心
            extend(s, i, i + 1, s.size()); // 以i和i+1为中心
        }
        return s.substr(left, maxLength);
    }
    void extend(const string& s, int i, int j, int n) {
        while (i >= 0 && j < n && s[i] == s[j]) {
            if (j - i + 1 > maxLength) {
                left = i;
                right = j;
                maxLength = j - i + 1;
            }
            i--;
            j++;
        }
    }
};

标签:子串,right,string,int,size,回文,最长,dp,left
From: https://www.cnblogs.com/lihaoxiang/p/17547853.html

相关文章

  • 最长回文子串时间复杂度为O(n)的算法
    给你一个字符串s,找到s中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。示例2:输入:s="cbbd"输出:"bb" 提示:1<=s.length<=1000s仅由数字和英文字母组成来源:力扣(LeetCo......
  • LeetCode 234. 回文链表
    classSolution{public:ListNode*reverse(ListNode*head)//翻转以head为头节点的链表{if(!head||!head->next)returnhead;autoa=head,b=head->next;while(b){autoc=b->next;b->next=a;......
  • LeetCode 热题 100 之 128. 最长连续序列
    题目描述给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n)的算法解决此问题。示例1:输入:nums=[100,4,200,1,3,2]输出:4解释:最长数字连续序列是[1,2,3,4]。它的长度为4。示例2:输入:nums......
  • 100000之内取回文数
    #include<iostream>/*runthisprogramusingtheconsolepauseroraddyourowngetch,system("pause")orinputloop*/usingnamespacestd;intmain(intargc,char**argv){system("pause");intge,shi,bai,qian,wan;......
  • C++黑马程序员——P193-196. string容器 字符串比较,字符存取,字符串插入和删除,子串
    P193.string容器——字符串比较P194....——字符存取P195....——字符串插入和删除P196....——子串获取P193.字符串比较 ——————————————————————————————————————————————————————————1//字符......
  • 【动态规划】子串、子序列问题
    目录应用应用1:Leetcode647.回文子串题目解题思路动态规划边界条件状态转移代码应用应用1:Leetcode647.回文子串题目647.回文子串解题思路动态规划设\(dp[i][j]\)表示子串\(s[i\cdotsj]\)是否是回文子串,若\(dp[i][j]=True\),则表示子串\(s[i\cdotsj]\)是回......
  • C# 上传文件至指定目录,并返回文件路径
     ///<summary>///上传图片并返回文件路径///</summary>///<paramname="file"></param>///<returns></returns>[HttpPost("UploadImage")]publicasync......
  • linux 中 shell脚本实现提取gff文件中的最长转录本
     001、数据和脚本[root@PC1test2]#lsGCF_001704415.1_ARS1_genomic.gffrecord.sh 002、脚本[root@PC1test2]#catrecord.sh##脚本内容#!/bin/bas##step1:eliminatetheinfluenceofpseudogenegrep-v"^#"GCF_001704415.1_ARS1_genomic.gff|......
  • 【LeetCode剑指offer#05】回文链表的两种解法+删除链表中间节点(链表的基本操作)
    回文链表给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。示例1:输入:head=[1,2,2,1]输出:true示例2:输入:head=[1,2]输出:false提示:链表中节点数目在范围[1,105]内0<=Node.val<=9思路将值复制到数组中后用双指针......
  • 3. 无重复字符的最长子串
    给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。示例1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度为3。示例2:输入:s="bbbbb"输出:1解释:因为无重复字符的最长子串是"b",所以其长度为1。示例3:输......