题解 | #编号子回文I#
编号子回文I
https://www.nowcoder.com/practice/db5995cd4783483f8b9f7a9e3b3a479f
考察的知识点:动态规划;
解答方法分析:
- 检查输入的字符串是否为空。如果为空,返回空字符串作为结果。
- 初始化变量 n 为字符串的长度,max 为当前找到的最长回文子串的长度,`start 为最长回文串的起始索引。
- 遍历字符串的每个字符,使用两指针 l 和 r 分别指向当前字符的前一个和后一个。
- 通过调用 maxLen 函数获取以当前字符为中的奇数长度和偶数长度的回文子串长度。将它们分别赋给变量 len。
- 如果 len 大于 max,更新 max 为 len,同时更新 start 为当前回文子串的起始索引。
- 遍结束后,最长回文子串的起始索引和长度已经确定,通过调用 substr 函数获取最终的结果字符串。
- 返回最长回文子串作为结果。
所用编程语言:C++;
完整编程代码:↓
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return string字符串 */ string longestPalindrome(string s) { if (s.empty()) { return ""; } int n = s.length(); int max = 0, start = 0; for (int i = 0; i < n; i++) { int len = std::max(maxLen(s, i, i), maxLen(s, i, i + 1)); if (len > max) { max = len; start = i - (len - 1) / 2; } } return s.substr(start, max); } int maxLen(const string& s, int l, int r) { while (l >= 0 && r < s.length() && s[l] == s[r]) { l--; r++; } return r - l - 1; } };