[LeetCode]--5. Longest Palindromic Substring
2016-10-18 20:17
501 查看
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.
我用的是中心扩展法
因为回文字符串是以中心轴对称的,所以如果我们从下标 i 出发,用2个指针向 i 的两边扩展判断是否相等,那么只需要对0到
n-1的下标都做此操作,就可以求出最长的回文子串。但需要注意的是,回文字符串有奇偶对称之分,即”abcba”与”abba”2种类型,
因此需要在代码编写时都做判断。
设函数int Palindromic ( string &s, int i ,int j) 是求由下标 i 和 j 向两边扩展的回文串的长度,那么对0至n-1的下标,调用2次此函数:
int lenOdd = Palindromic( str, i, i ) 和 int lenEven = Palindromic (str , i , j ),即可求得以i 下标为奇回文和偶回文的子串长度。
接下来以lenOdd和lenEven中的最大值与当前最大值max比较即可。
这个方法有一个好处是时间复杂度为O(n2),且不需要使用额外的空间。
还有一些动态规划啊啥的其他的几个方法,我也没去弄懂,有兴趣可以进这讨论区看看。
LeetCode官方讨论区
我用的是中心扩展法
因为回文字符串是以中心轴对称的,所以如果我们从下标 i 出发,用2个指针向 i 的两边扩展判断是否相等,那么只需要对0到
n-1的下标都做此操作,就可以求出最长的回文子串。但需要注意的是,回文字符串有奇偶对称之分,即”abcba”与”abba”2种类型,
因此需要在代码编写时都做判断。
设函数int Palindromic ( string &s, int i ,int j) 是求由下标 i 和 j 向两边扩展的回文串的长度,那么对0至n-1的下标,调用2次此函数:
int lenOdd = Palindromic( str, i, i ) 和 int lenEven = Palindromic (str , i , j ),即可求得以i 下标为奇回文和偶回文的子串长度。
接下来以lenOdd和lenEven中的最大值与当前最大值max比较即可。
这个方法有一个好处是时间复杂度为O(n2),且不需要使用额外的空间。
public class Solution { public String longestPalindrome(String s) { int start = 0, end = 0; for (int i = 0; i < s.length(); i++) { int len1 = expandAroundCenter(s, i, i); int len2 = expandAroundCenter(s, i, i + 1); int len = Math.max(len1, len2); if (len > end - start) { start = i - (len - 1) / 2; end = i + len / 2; } } return s.substring(start, end + 1); } private int expandAroundCenter(String s, int left, int right) { int L = left, R = right; while (L >= 0 && R < s.length() && s.charAt(L) == s.charAt(R)) { L--; R++; } return R - L - 1; } }
还有一些动态规划啊啥的其他的几个方法,我也没去弄懂,有兴趣可以进这讨论区看看。
LeetCode官方讨论区
相关文章推荐
- LeetCode-005 Longest Palindromic Substring
- leetcode05- Longest Palindromic Substring之Java版本
- LeetCode(5) Longest Palindromic Substring
- LeetCode - Longest Palindromic Substring
- Leetcode | Longest Palindromic Substring
- Leetcode:Longest Palindromic Substring
- [LeetCode]Longest Palindromic Substring
- LeetCode 5 Longest Palindromic Substring(最大回文子字符串)
- 【leetcode】Longest Palindromic Substring
- leetcode-005 Longest Palindromic Substring
- Longest Palindromic Substring--LeetCode
- leetcode 005 Longest Palindromic Substring(java)
- Longest Palindromic SubString -- LeetCode
- [LeetCode]Longest Palindromic Substring
- 【LeetCode】005.Longest Palindromic Substring
- 24-Longest Palindromic Substring-Leetcode
- leetcode-Longest Palindromic Substring
- LeetCode力扣之 Longest Palindromic Substring
- leetcode-Longest Palindromic Substring
- 每周LeetCode算法题(二):Longest Palindromic Substring