需求描述
对于长度为n的一个字符串A(仅包含数字,大小写英文字母),请设计一个高效算法,计算其中最长回文子串的长度。
代码实现
方法一:
std::string Solution::longestPalindrome(const std::string& s) {
std::string res;
std::string temp;
for (int i = 0; i < s.length();) {
for (int j = i; j < s.length(); j++) {
temp += s[j];
std::string tem = temp;
std::reverse(tem.begin(), tem.end());
if (temp == tem) {
res = res.length() > temp.length() ? res : temp;
}
}
temp = "";
}
return res;
}
方法二:
std::string Solution::longestPalindromeS(const std::string& s)
{
if (s.empty()) {
return "";
}
if (s.length() == 1) {
return s;
}
int st = 0, len = 1;
for (int i = 0; i < s.length();) {
if (s.length() - i <= len / 2) {
break;
}
int j = i, k = i;
while (k < s.length() - 1 && s[k] == s[k + 1]) {
k++;
}
i = k + 1;
while (j > 0 && k < s.length() - 1 && s[j - 1] == s[k + 1]) {
j--;
k++;
}
int newlen = k - i + 1;
if (newlen > len) {
len = newlen;
st = j;
}
}
return s.substr(st, len);
}