[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(最长回文子串,暴力剪枝/DP/曼彻斯特算法)

Longest Palindromic Substring题目链接:Longest Palindromic SubstringDescriptionGiven a string s, find the...

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

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

leetcode之路005 Longest Palindromic Substring

#include "stdafx.h" #include #include #include #include using namespace std; class Solution { pu...

leetcode 5: Longest Palindromic Substring

Given a string S, find the longest palindromic substring in S. You may assume that the maximum len...

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

LeetCode OJ的第五题,如果有问题或者给我指点欢迎来信讨论ms08.shiroh@gmail.com 题目描述...

leetcode-5. Longest Palindromic Substring

Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt...
  • fao9001
  • fao9001
  • 2017年05月03日 09:08
  • 118

Longest Palindromic Substring(leetcode medium algorithm problem)

本题是LeetCode上的一道中等难度题。 题目是寻找字符串中最长的回文串——原题链接Input: “babad”Output: “bab”Note: “aba” is also a valid a...

LeetCode#5* Longest Palindromic Substring

Given a string s, find the longest palindromic substring in s. You may assume that the maximum lengt...

(Leetcode)5. Longest Palindromic Substring(medium)

Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt...

Longest Palindromic Substring(leetcode5)

题目描述: Given a string s, find the longest palindromic substring in s. You may assume that the maxim...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[LeetCode]Longest Palindromic Substring
举报原因:
原因补充:

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