标签:
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.
给定字符串S,找到它的最长回文子串。假设S的最长长度是1000,并且只有唯一一个最长子串。
这道题有多种解法,可以使用动态规划,公式为:P(i, j) = P(i+1, j-1) && (S[i] == S[j]),根据长度限制,辅助空间可以静态设为1000*1000,时间复杂度是O(n*n),
空间也是O(n*n),也可以从中间往两边遍历,直到发现不对称的字符,要注意的是回文分分中心字符和没有中心字符两种情况,分别考虑就行了,时间复杂度也是O(n*n),
但是空间只需要O(1),所以本文采用了第二种,代码如下:
string longestPalindrome(string s) { int n = s.size(); string ret; for (int i=0; i<n; ++i) { int L = i, R = i; while (L>=0 && R<n && s[L] == s[R]) { --L; ++R; } ++L; --R; if (ret.size() < R-L+1) ret = s.substr(L, R-L+1); L = i; R = i+1; while (L>=0 && R<n && s[L] == s[R]) { --L; ++R; } ++L; --R; if (ret.size() < R-L+1) ret = s.substr(L, R-L+1); } return ret; }
5. Longest Palindromic Substring
标签:
原文地址:http://www.cnblogs.com/zhiguoxu/p/5461590.html