LeetCode刷题-005最长回文子串

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba"也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"

 1 string longestPalindrome(string s)
 2 {
 3
 4     string str = "$#";
 5     for(int i = 0; i < s.size(); i++)   //字符串长度奇偶变换,添加‘$‘防止数组越界
 6     {
 7         str += s[i];
 8         str += "#";
 9     }
10     str += "$";
11     //cout<<str;
12
13     int p[str.size()-2]={0};    //定义p[i]数组
14
15     int right = 0, mid = 0;
16     for(int i = 1; i <  str.size()-1; i++)
17     {
18         if(right > i)
19         {
20             p[i] = (p[2*mid - i] < (right - i) ? p[2*mid - i] : (right - i));   //计算以i为中心的回文字串的最小长度
21         }
22         else
23         {
24             p[i] = 1;
25         }
26
27         while(str[i - p[i]] == str[i + p[i]])  p[i]++;     //回文子串长度延伸
28
29         if(i + p[i] > right)
30         {
31             right = i + p[i];
32             mid = i;
33         }
34
35     }
36
37     int max = 0, middle=0;
38     for(int i = 1; i < str.size()-1; i++)   //生成最终结果
39     {
40         if(p[i] > max)
41         {
42             middle = i;
43             max = p[i];
44         }
45     }

原文地址:https://www.cnblogs.com/nkqlhqc/p/9085333.html

时间: 2024-07-30 13:20:22

LeetCode刷题-005最长回文子串的相关文章

LeetCode刷题8——最长回文子串

一.要求 二.背景 (1)回文:正反读都相同的字符串 (2)找到字符串中对应的索引 S:字符串 s:想要求索引的字符 (1) S.index(s) 只能找到第一个s对应的索引,不能求完 (2) [i for in range(len(S)) if S[i]==s]  #可以找完全部的索引 三.解题思路 1.依次取字符串中字符,找到后面与之相等的字符对应的索引,截取这段字符串并进行回文函数的判断,若新回文长度大于老回文长度,那么用新回文替换老回文 class Solution: def longe

LeetCode之“字符串”:最长回文子串

题目要求: 给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串.例如,给出字符串 "abcdzdcab",它的最长回文子串为 "cdzdc". 解答: 这个题目的一个简单的解法就是对字符串中的每一个字符,同时向其两边延展,以找到最长回文子串.这种方法是可以的,但要处理回文子串长度为奇数和偶数的两种情况是比较麻烦的.如下图的几个字符串: “a” "aa" "aaa" "

转载:LeetCode:5Longest Palindromic Substring 最长回文子串

本文转自:http://www.cnblogs.com/TenosDoIt/p/3675788.html 题目链接 Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 求字符串的最长回文子串 算法1:暴

Leetcode(5)最长回文子串

Leetcode(4)寻找两个有序数组的中位数 [题目表述]: 给定一个字符串 s,找到 s 中 最长 的回文子串.你可以假设 s 的最大长度为 1000.' 第一种方法:未完成:利用回文子串的特点 一开始我的思路如下:回文子串的特点是首尾字母相同,所以我对每一个字母都找到位于它后面的相同字母,利用切片判断这一段是否为回文子串(str[i:j]==str[i:j][::-1]).时间复杂度很高,主要是因为str.find操作非常耗时. class Solution(object): def lo

[Leetcode] Longest palindromic substring 最长回文子串

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 做这道题之前要先了解什么是回文子串.回文串通俗的解释是,分别从字符串两端开始遍历,得到的结果相同,如"abba",从两端的遍历结果都是:&q

leetcode刷题1--动态规划法回文串2

题目是: Given a string s,partition s such that every substring of the partition is a palindrome Return tthe mininum cuts needed for a palindrome partitioning of s. For example,given s="aab" Return 1 since the  palindrome partition["aa",&q

算法题--最长回文子串

题目描述 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设?s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案. 示例 2: 输入: "cbbd" 输出: "bb" 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-palindromic-substring

【LeetCode】5# 最长回文子串

题目描述 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案. 示例 2: 输入: "cbbd" 输出: "bb" 思路 本题运用了一些动态规划的思想,关于动态规划,可以看看我之前的一篇博客了解一下. LeetCode 探索初级算法 - 动态规划 1.首先要找到最简情况.这道题

Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000. Example 1: Input: "babad" Output: "bab" Note: "aba" is also a valid answer. Example 2: Input: "cbbd"