Skip to content

[Leetcode] 5. Longest Palindromic Substring โ€‹

Problem โ€‹

๋ฌธ์ œ ๋งํฌ

์ตœ๊ณ ๋กœ ๊ธด ํŒฐ๋ฆฐ๋“œ๋กฌ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ

Solution โ€‹

  1. palindromic ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค.
  2. ๋ฌธ์ž์—ด์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.
  3. ๋งˆ์ง€๋ง‰ ๋ฌธ์ž ๊ฐ’์„ ๋น„๊ตํ•˜๋ฉฐ ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
  4. ๋งž๋‹ค๋ฉด ๊ทธ ๊ธธ์ด๋ฅผ ์ €์žฅํ•˜๊ณ  ์•„๋‹ˆ๋ผ๋ฉด 3๋ฒˆ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
  5. ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์—์„œ ์ฒ˜์Œ ์‹œ์ž‘๋ฌธ์ž๊นŒ์ง€ ๋„์ฐฉํ•˜๋ฉด ์ฒ˜์Œ์—์„œ ๋‹ค์Œ ๋ฌธ์ž๋กœ ์ด๋™ํ•˜๊ณ  3~4๋ฒˆ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
  • ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ง€ ํŒŒ์•…ํ•˜๊ธฐ์ „์— ์ด์ „์— ํŒฐ๋ฆฐ๋“œ๋กฌ์ธ์ ์ด ์žˆ๋‹ค๋ฉด ๊ธธ์ด๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ๋‹ค๊ฐ€ ๋น„๊ตํ•  ๋ฌธ์ž์—ด ๊ธธ์ด๋ฅผ ๋น„๊ตํ•˜์—ฌ ์กฐ๊ฑด์ฒ˜๋ฆฌ๋ฅผํ•œ๋‹ค.
    ์†๋„๋ฅผ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

JS Code โ€‹

js
/**
 * @param {string} s
 * @return {string}
 */
var longestPalindrome = function (s) {
  let maxLenStr = ''

  for (let i = 0; i < s.length; i++) {
    if (maxLenStr.length > s.length - i) break

    let j = s.lastIndexOf(s[i])
    let temp = s.substring(i, j + 1)

    while (i < j) {
      if (maxLenStr.length < temp.length && isPalindromic(temp)) {
        maxLenStr = temp
        break
      }
      j = s.lastIndexOf(s[i], j - 1)
      temp = s.substring(i, j + 1)
    }
  }

  return maxLenStr || s[0]
}

const isPalindromic = str => {
  let [start, end] = [0, str.length - 1]

  while (start < end) {
    if (str[start++] !== str[end--]) return false
  }

  return true
}