表头 | 表头 |
---|---|
单元格 | 单元格 |
单元格 | 单元格 |
\(x+y=z\)
孙宾
class Solution
{
public:
string longestPalindrome(string s)
{
/* 判读 */
if (s.size() < 2)
return s;
/* 定义存储结果的变量 */
string result;
/* 定义dp数组 */
vector<vector<bool>> dp(s.size() + 1, vector<bool>(s.size() + 1, false));
/* dp数组初始化 */
for (int i = 0; i < s.size(); i++)
dp[i][i] = true;
/* 注意遍历顺序 */
int maxLen = 0;
int beginIndex = 0;
for (int i = s.size() - 1; i >= 0; i--)
{
for (int j = i; j < s.size(); j++)
{
if (s[i] == s[j])
{
if (j - i <= 1)
{
dp[i][j] = true;
}
else if (dp[i + 1][j - 1])
{
dp[i][j] = true;
}
/* 当是回文串的时候记录最大长度和更新起始位置 */
if (dp[i][j] && j - i + 1 > maxLen)
{
maxLen = j - i + 1;
beginIndex = i;
}
}
}
}
/* 截取子串 */
result = s.substr(beginIndex, maxLen);
return result;
}
};