来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/longest-palindromic-substring 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

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

解答

  1. 遍历到某个字符,找到下一个此字符的位置
  2. 截取这段字符,判断是否回文
  3. 重复此操作,直到遍历结束
    1. /**
    2. * @param {string} s
    3. * @return {string}
    4. */
    5. var isPalindrome = s => {
    6. let start = 0,
    7. end = s.length - 1;
    8. while (start < end) {
    9. if (start < end && s[start] !== s[end]) {
    10. return false;
    11. }
    12. ++start;
    13. --end;
    14. }
    15. return true;
    16. }
    17. var longestPalindrome = function(s) {
    18. if (s.length <= 1) return s;
    19. let maxStr = '', sLen = s.length;
    20. for (let i = 0; i < sLen; i++) {
    21. const char = s[i];
    22. let offset = i + 1,
    23. nextCharIdx = -1;
    24. while (~(nextCharIdx = s.indexOf(char, offset))) {
    25. const chunk = s.slice(i, nextCharIdx + 1);
    26. if (isPalindrome(chunk)) {
    27. if (chunk.length > maxStr.length) {
    28. maxStr = chunk;
    29. }
    30. }
    31. offset = nextCharIdx + 1;
    32. }
    33. }
    34. if (maxStr.length > 1) {
    35. return maxStr;
    36. } else {
    37. return s[0];
    38. }
    39. };