Leecode刷题
- 题目描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
- 示例:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
class Solution {
public:
string longestPalindrome(string s)
{
if (s.empty()) return "";
int len = s.size();
if (len == 1)return s;
int longest = 1;
int start=0;
vector<vector<int> > dp(len,vector<int>(len)); //初始化vector二维数组
// 分别处理回文子串长度为奇数位和偶数位的请况;
for (int i = 0; i < len; i++)
{
dp[i][i] = 1; //使得二维数组对角线元素值均为1
if(i<len-1)
{// 找到字串中相邻两个相等的字符位置,若找到,这时长度为2
if (s[i] == s[i + 1])
{
dp[i][i + 1] = 1;
start = i;
longest = 2;
}
}
}
//子串长度从3开始,长度依次递增
for (int lon = 3; lon <= len; lon++)
{
//从初始位置开始依次遍历当前长度的子串,确认其中是否有回文子串
for (int i = 0; i+lon-1 < len; i++) //枚举子串的起始点
{
int j = lon+i-1; //终点
if (s[i] == s[j] && dp[i+1][j-1] == 1)
{
dp[i][j] = 1;
start = i;
longest = lon;
}
}
}
return s.substr(start,longest);
}
};