题目:
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example:
Input: “babad”
Output: “bab”
Note: “aba” is also a valid answer.
Example:
Input: “cbbd”
Output: “bb”
链接:Longest Palindromic Substring
解法:中心扩展法,时间O(n^2)
char* longestPalindrome(char* s) {
int maxlen = strlen(s), len = 0, pos = 0, maxj;
char* ans;
for (int i = 0; i < maxlen; i++) {
int j = 0;
maxj = i > maxlen - i - 1 ? maxlen - i - 1 : i;
for (j = 0; j <= maxj && s[i - j] == s[i + j]; j++) ;
if (len < j * 2 - 1) {
pos = i - j + 1;
len = j * 2 - 1;
}
maxj = i > maxlen - i - 2 ? maxlen - i - 2 : i;
for (j = 0; j <= maxj && s[i - j] == s[i + j + 1]; j++) ;
if (len < j * 2) {
pos = i - j + 1;
len = j * 2;
}
}
ans = s + pos;
ans[len] = 0;
return ans;
}
Runtime: 9 ms