leetcode-005 Longest Palindromic Substring

来源:互联网 发布:精灵虚拟光驱 mac 编辑:程序博客网 时间:2024/06/05 06:36

  • 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
0 0
原创粉丝点击