Leetcode刷题(第5题)——最长回文子串

x33g5p2x  于2022-02-24 转载在 其他  
字(0.8k)|赞(0)|评价(0)|浏览(352)

一、题目描述

  1. 给你一个字符串 s,找到 s 中最长的回文子串。

二、示例

  1. 示例 1
  2. 输入:s = "babad"
  3. 输出:"bab"
  4. 解释:"aba" 同样是符合题意的答案。
  5. 示例 2
  6. 输入:s = "cbbd"
  7. 输出:"bb"

三、解题思路
我们要明白最长回文子串的特点,最长回文子串的特点是呈现对称的现象,比如说aabbaa,或者aba,都是对称的。所以此时我们可以分为两种情况,一种是最长回文子串为奇数长度,另一种为偶数长度奇数长度的从中间哪一个分别向左向右对比,两边都相等即可。偶数长度的回文子串从中间的那一个和下一个字符开始,左边的不断向左移动,右边的不断向右移动,两者保持相等。
四、代码展示

  1. /**
  2. * @param {string} s
  3. * @return {string}
  4. */
  5. var longestPalindrome = function (s) {
  6. const getStr = (s, l, r) => {
  7. while (l >= 0 && r < s.length && s[l] === s[r]) {
  8. l--;
  9. r++
  10. }
  11. return s.substr(l + 1, r - l - 1)
  12. }
  13. let res1 = ""
  14. let res2 = ""
  15. let res = ""
  16. let left = 0;
  17. let len = s.length
  18. for (; left <= len - 1; left++) {
  19. res1 = getStr(s, left, left)
  20. res2 = getStr(s, left, left + 1)
  21. res = res.length > res1.length ? res : res1
  22. res = res.length > res2.length ? res : res2
  23. }
  24. return res
  25. };

五、结果

相关文章