题解 | #编号子回文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;
}
};
三奇智元机器人科技有限公司公司福利 88人发布
查看1道真题和解析