[LeetCode]题解(python):005-Longest Palindromic Substring

题目来源:

https://leetcode.com/problems/longest-palindromic-substring/


题意分析:

这道题目是输入一段不超过1000的字符串,输出最长的回文子字符串,输入的字符串有一个唯一的最长回文子字符串(个人觉得这个没什么用,还限制了一些输入,比如长度为2的时候肯定就只能输入两个相同的字符,还不如改为有同样长度的输出第一个最长回文子字符串,所以该题目我是按照第一个最长回文子字符串)。


题目思路:

题目的字符串长度是1000,如果我们暴力解决,那么构造字符串时间复杂度(O(n^2)),判断字符串是不是回文字符串时间复杂度(O(n))总的时间复杂度是(O(n^3)),如果暴力解决,那么肯定是会TLE的。

寻找回文字符串一般有两种方法。第一种是先构造一个字符串,从首尾开始判断是否对应相等。这种方法需要的时间复杂度比较大。第二种方法是从中间往两边找,直到找到两边不一样。这种方法我们要先确定中间的key字符,这里由于当重复字符出现的时候,应该把这些重复的字符捆在一起,因为重复字符出现的时候放中间可以保证满足是回文字符串。比如’‘abbbbba’,如果我们将’bbbbb’捆在一起可以减少很多不必要的判断,而且可以避免回文字符串个数为偶数的时候被忽略的情况,比如’abba’。

那么我们可以初始化回文子字符串为s[0],长度是1,从第一个字符开始往两边找,记录从这个字符为中间字符搜索的回文字符串的长度,如果大于当前记录的回文,那么替换当前的字符串及其长度。从中间找到了最后一位或者以最后一个字符为中间key字符的时候结束。这种方法最坏的情况是’ababababababababa……bac’,这种情况的时间复杂度是(0 + 1 + 2 +…+n - 1) = (O(n^2)),由于字符串长度为1000,所以(O(n^2))的时间复杂度是可以接受的。


代码(python):

 1 class Solution(object):
 2     def longestPalindrome(self, s):
 3         """
 4         :type s: str
 5         :rtype: str
 6         """
 7         size = len(s)
 8         if size == 1:
 9             return s
10         if size == 2:
11             if s[0] == s[1]:
12                 return s
13             return s[0]
14         maxp = 1
15         ans = s[0]
16         i = 0
17         while i < size:
18             j = i + 1
19             while j < size:
20                 if s[i] == s[j]:
21                     j += 1
22                 else:
23                     break
24             k = 0
25             while i - k - 1 >= 0 and j + k<= size - 1:
26                 if s[i- k - 1] != s[j + k]:
27                     break
28                 k += 1
29             if j - i + 2*k > maxp:
30                 maxp = j- i + 2*k
31                 ans = s[i - k:j + k]
32             if j + k == size - 1:
33                 break
34             i = j
35         return ans



转载请注明出处:http://www.cnblogs.com/chruny/

时间: 2024-10-14 08:58:00

[LeetCode]题解(python):005-Longest Palindromic Substring的相关文章

LeetCode 题解之 5. Longest Palindromic Substring

5. Longest Palindromic Substring 题目描述和难度 题目描述: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设?s 的最大长度为1000. 示例 1: 输入: "babad"输出: "bab"注意: "aba"也是一个有效答案. 示例 2: 输入: "cbbd"输出: "bb" 题目难度:中等. 英文网址:5. Longest Palindromic Substri

【LeetCode】005 Longest Palindromic Substring

题目:LeetCode 005 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. 题意:字符串S,找到S中的最长回文子串.假定S最长为100

LeetCode-Algorithms #005 Longest Palindromic Substring, Database #179 Consecutive Numbers

LeetCode-Algorithms #005 Longest Palindromic Substring 英语学习时间palindromic: [医] 复发的, 再发的 在数学和计算机上,就指回文 这道题目就是找出给定字符串中最长的回文子串, 可以假定原字符串的长度不超过1000 直接遍历来做肯定是不难, 但也可以想见一定是慢得可以. 那么我的另一个想法是, 从原串中的每一个字符, 或每两个字符中间的空隙开始, 向左右两边判断是否为回文串, 最后找出最长的 1 class Solution

Java for LeetCode 005 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. 解题思路一: 暴力枚举 共N^2量级个子串(从下标零开始),每次检查需一个for循环,等于是3重for循环,时间复杂度O(n^3) 解题思路二: 动态

LeetCode 005 Longest Palindromic Substring - Java

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

LeetCode【5】. Longest Palindromic Substring --java实现

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. 题目要求给定字符串的最大对称子字符串,如"aaabccbac

leetcode第五题--Longest Palindromic Substring

Problem: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. 找出最大的回文子串,回文就是指字符串倒过来和之前的一样.例如aba  倒过来还是aba.abac中的最大回文子串就是aba. 我一开始

Leetcode:【DP】Longest Palindromic Substring 解题报告

Longest Palindromic Substring -- HARD 级别 Question SolutionGiven 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. 经典的DP题目. 主页君给出3种解

[LeetCode] 005. Longest Palindromic Substring (Medium) (C++/Java/Python)

索引:[LeetCode] Leetcode 题解索引 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 005.Longest_Palindromic_Substring (Medium) 链接: 题目:https://oj.leetcode.com/problems/Longest-Palindromic-Substring/ 代码(github):https://github.com/illuz/leetcode

005. Longest Palindromic Substring

(1)动态规划,时间复杂度O(N^2),超时 1 string longestPalindrome(string s) 2 { 3 if (s.size() < 2) return s; 4 int max_len = 1; 5 vector<vector<int>> vec(s.size(), vector<int>(s.size(), 0)); 6 for (int i = 0; i < s.size(); ++i) vec[i][i] = 1; 7 f