您的位置:首页 > 其它

leetcode-005 Longest Palindromic Substring

2016-09-16 00:53 393 查看
P005 Longest Palindromic Substring
思路分析

代码
java

python

P005 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.

思路分析

最长回文最简单最直观的思路就是:

从某个中点(middle)向两边扫描之道不是回文

中点紧邻的两个点记为left和right

left 和 right有可能相等(字符串长度为偶数时)

直到不是回文的时候将该轮循环的子串和上轮做比较取较长者

遍历所有的可能性—O(n^2)

代码

java

public class Solution005 {
private String longestPalindrome(String s, int left, int right) {
while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
left--;
right++;
}
return s.substring(left + 1, right);
}

public String longestPalindrome(String s) {
if (s == null || s.length() == 0)
return "";
String ret = "";
for (int i = 0; i < s.length() * 2 - 1; i++) {
int left = i / 2;
int right = i / 2;
if ((i & 1) == 1)// 奇数
right++;
String tmp = this.longestPalindrome(s, left, right);
if (ret.length() < tmp.length())
ret = tmp;
}
return ret;
}

}


python

class Solution005(object):

def longestStr(self, s, left, right):
l = len(s)
while left >= 0 and right < l and s[left] == s[right]:
left -= 1
right += 1
return s[left + 1:right]

def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
if not s : return ""

ret = "";i = 0
for i in range(len(s) * 2 - 1):
left = i / 2
right = i / 2
if (i & 1) == 1:right += 1

tmp = self.longestStr(s, left, right)

if len(tmp) > len(ret):ret = tmp

return ret
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息