目录
1.最长回文子串
5. 最长回文子串 - 力扣(LeetCode)
https://leetcode.cn/problems/longest-palindromic-substring/
cpp
class Solution {
public:
string longestPalindrome(string s) {
// 先处理特殊情况
if (s.empty()) return "";
int n = s.size();
int start = 0, maxLen = 1;
auto expandAroundCenter = [&](int left, int right) {
while (left >= 0 && right < n && s[left] == s[right])
{
left--;
right++;
}
// 循环结束后,实际回文范围是[left+1, right-1]
int curLen = right - left - 1;
if (curLen > maxLen)
{
maxLen = curLen;
start = left + 1;
}
};
for (int i = 0; i < n; i++)
{
// 奇数长度回文
expandAroundCenter(i, i);
// 偶数长度回文
if (i + 1 < n)
{
expandAroundCenter(i, i + 1);
}
}
return s.substr(start, maxLen);
}
};
a.核心思想
遍历所有可能的子串,判断其是否为回文串,并记录最长回文子串。
b.思路
采用中心扩散法,以每个字符(或两个字符之间的间隙)为中心,向两边扩散,比较两边字符是否相同,从而找到以该中心的最长回文子串。
c.步骤
① 初始化一个变量用于记录最长回文子串的起始位置和长度。
② 遍历字符串,对于每个字符:
以当前字符为中心,向左右两边扩散,找到奇数长度的最长回文子串。
以当前字符和下一个字符之间的间隙为中心,向左右两边扩散,找到偶数长度的最长回文子串。
③ 比较每次找到的回文子串的长度,更新最长回文子串的记录。
④ 根据记录的起始位置和长度,从原字符串中截取并返回最长回文子串。
2.main函数是如何开始的
启动:操作系统加载程序,跳转到程序入口(通常为
_start函数)。初始化:运行时库(如
CRT)执行全局变量、静态变量的构造函数初始化。调用main:运行时库调用
main()函数,开始执行用户代码。结束:
main()返回退出码,操作系统终止程序。
操作系统启动程序→运行时库初始化→自动调用main()→执行用户逻辑→返回退出码。
希望这些内容对大家有所帮助!
感谢大家的三连支持!