给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd" 输出:"bb"
提示:
- 1 <= s.length <= 1000
- s 仅由数字和英文字母组成
Related Topics
- 字符串
- 动态规划
解题思路
-
回文串无非就是两种情况:abba和aba,可以看到一个是奇数,一个是偶数。
-
知识点一:怎么求回文?
-
我们的思路就是,从中间开始,向两边同时遍历,当左右元素一样的时候,代表满足回文条件。
一直循环这个过程去判断,直到左右不相等,截取这一段就好了。 -
知识点二:从哪个字符开始向两边找?
-
答案是从头开始遍历,我们把每一个字符串都当做是中间字符串,向两边寻找
代码
//leetcode submit region begin(Prohibit modification and deletion)
/**
* @param {string} s
* @return {string}
*/
var longestPalindrome = function (s) {
if (s.length < 2) {
return s;
}
let target = "";
//从哪个字符开始向两边找?
for (var i = 0; i <= s.length; i++) {
fun(i, i);
fun(i, i + 1);
}
//怎么求回文?
function fun(left, right) {
while (left >= 0 && right <= s.length - 1 && s[left] == s[right]) {
--left;
right++;
}
//substring:从第一个参数开始,到第二个参数的前一个(包含第一个,不包含第二个)
// 例: 'abcd'.substring(1,3)=>'bc'
if (s.substring(left + 1, right)?.length > target?.length) {
target = s.substring(left + 1, right);
}
}
return target;
};
console.log(longestPalindrome("babad"));
//leetcode submit region end(Prohibit modification and deletion)
截图