题目

C++ solution
class Solution {
public:
string longestPalindrome(string s) {
int len = s.size(); // 字符串s的长度
if (len < 1)
{
return "";
}
int start = 0, maxlen = 0; // 记录子字符串的首字符在原字符串中的下标和回文子串的最大长度
// 遍历每个回文子串的中心点,中心有两种情况,一是单个字符,二是两个相同且相邻的字符
for (int i = 0; i < len; i++)
{
int len1 = lenWithGivenCenter(s, len, i, i);
int len2 = lenWithGivenCenter(s, len, i, i+1);
int longlen = len1 > len2 ? len1 : len2;
if (longlen > maxlen)
{
maxlen = longlen;
start = i - (maxlen - 1) / 2;
}
}
return s.substr(start, maxlen);
}
/*
* 计算由给定中心所得到的最长回文的长度
*/
int lenWithGivenCenter(string s, int len, int left, int right)
{
while(left >= 0 && right < len && s[left] == s[right])
{
left--;
right++;
}
return right - left - 1;
}
};
简要题解
回文串是指正反读都一样的字符串,即该字符串是对称的。所以回文串必有一个中心点,中心点有两种情况,一是单个字符,二是两个相同且相邻的字符。遍历给定字符串的所有可能中心点,计算每个中心点所得到的最长回文的长度,比较得到最长的回文子串。
本文介绍了一种使用C++实现的算法,用于寻找给定字符串中的最长回文子串。通过遍历所有可能的中心点并计算以此为中心的最长回文长度,最终找出最长的回文子串。
1287

被折叠的 条评论
为什么被折叠?



