[LeetCode]Longest Palindromic Substring

原创 2015年07月08日 09:51:42

最大回文数

先介绍一种O(n^2)的方法https://github.com/TonyChouZJU/LeetCode/tree/master/119.%20Longest%20Palindromic%20Substring
假设 S(i, j) 为问题的解,即从位置 i 到 j 的字符串是 Longest Palindromic Substring of the string.

我们从最简单的字符串来想:

a
单字符本身是否是回文?是。即 S(i, i)

a a
两个相同字符是否组成回文?是。即 S(i, i+1) when s[i] == s[i+1].

b a a b
为上面的回文字符串首尾增加一个相同的字符 b, 组成了回文,即 S(i, j) when S(i+1, j-1) and s[i] == s[j].

由于我们持续在首尾增加字符,对于单字符,则长度一直为奇数;对于双字符,则长度一直为偶数。所以要涵盖所有情况,需要分别验证这两种情况。

好了,分析到这里基本可以明白回文的规律所在了。

要求的是长度,那么我们记 Longest Palindromic Substring 为 longest.

void longestPalindrome(const string& s, int b, int e, int &start, int &last) {
// 这个函数尝试对现有子串首尾扩张,若出现更大的长度,则记录之。
int len = s.size();
while (b >= 0 && e < len && s[b] == s[e])
–b, ++e;
++b, –e;
if (e - b > last - start) {
start = b;
last = e;
}
}
主函数里就非常轻松惬意了。

string longestPalindrome(string s) {
    int len = s.size();
    if (len == 0) return s;
    int start = 0, last = 0;
    for (int i=0; i<len-1; ++i) {
        longestPalindrome(s, i, i, start, last); // 奇数情况
        longestPalindrome(s, i, i+1, start, last); // 偶数情况
    }
    return s.substr(start, last-start+1);
}

时间复杂度应该在 O(n^2), 空间复杂度为 O(1). 属于常规解法。

版权声明:本文为博主原创文章,未经博主允许不得转载。

LeetCode(5) Longest Palindromic Substring

如果一个字符串从左向右写和从右向左写是一样的,这样的字符串就叫做palindromic string,如aba,或者abba。给定输入一个字符串,要输出一个子串,使得子串是输入字符串的最长的padro...
  • feliciafay
  • feliciafay
  • 2013年11月27日 14:00
  • 17814

LeetCode Longest Palindromic Substring 最长回文子字符串 两种方法分析解答

最难想的地方:P代表一个表,比较难想的就是P表的下标i和j代表原字符串中的两个前后下标s[i]和s[j]的位置。 如果P[i,j]为真,当且仅当si-1,si-2...sj-1,sj这一个子串都为pa...
  • kenden23
  • kenden23
  • 2013年11月23日 10:27
  • 2867

【LeetCode-面试算法经典-Java实现】【005-Longest Palindromic Substring(最长回文子串)】

【005-Longest Palindromic Substring(最长回文子串)】给定一个字符串S,找出它的最大的回文子串,你可以假设字符串的最大长度是1000,而且存在唯一的最长回文子串。动态规...
  • DERRANTCM
  • DERRANTCM
  • 2015年07月17日 06:42
  • 2575

【LeetCode】Longest Palindromic Substring 解题报告

DP、KMP什么的都太高大上了,自己想了个朴素的遍历方法。 【题目】 Given a string S, find the longest palindromic substring in S. ...
  • ljiabin
  • ljiabin
  • 2014年10月26日 15:17
  • 4355

[leetcode: Python]5.Longest Palindromic Substring

题目: Given a string s, find the longest palindromic substring in s. You may assume that the maximum ...
  • NXHYD
  • NXHYD
  • 2017年05月17日 10:32
  • 280

[LeetCode]5 Longest Palindromic Substring(C++,Python实现)

LeetCode OJ的第五题,如果有问题或者给我指点欢迎来信讨论ms08.shiroh@gmail.com 题目描述...
  • Shiroh_ms08
  • Shiroh_ms08
  • 2014年05月23日 21:28
  • 3111

Leetcode 5. Longest Palindromic Substring 新补充Manacher算法

5. Longest Palindromic Substring Total Accepted: 98755 Total Submissions: 434700 Difficulty: Medi...
  • fantasiasango
  • fantasiasango
  • 2016年03月15日 09:34
  • 526

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

[LeetCode] 005. Longest Palindromic Substring (Medium) (C++/Java/Python)
  • hcbbt
  • hcbbt
  • 2015年02月28日 00:09
  • 2914

LeetCode 5:Longest Palindromic Substring

Given a string S, find the longest palindromic substring in S. You may assume that the maximum len...
  • sunao2002002
  • sunao2002002
  • 2015年05月12日 00:38
  • 2637

leetcode -- Longest Palindromic Substring -- 重点,有O(n)思路未理解

https://leetcode.com/problems/longest-palindromic-substring/思路1遍历所有s[i], 当回文串长度为奇数的时候,判断以其为中点的回文串的长度...
  • xyqzki
  • xyqzki
  • 2015年12月12日 21:30
  • 350
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[LeetCode]Longest Palindromic Substring
举报原因:
原因补充:

(最多只允许输入30个字)