[Leetcode] 5. Longest Palindromic Substring โ
Problem โ
์ต๊ณ ๋ก ๊ธด ํฐ๋ฆฐ๋๋กฌ์ ๊ตฌํ๋ ๋ฌธ์
Solution โ
- palindromic ํจ์๋ฅผ ๋ง๋ ๋ค.
- ๋ฌธ์์ด์ ์ฒ์๋ถํฐ ์์ํ๋ค.
- ๋ง์ง๋ง ๋ฌธ์ ๊ฐ์ ๋น๊ตํ๋ฉฐ ํฐ๋ฆฐ๋๋กฌ์ธ์ง ํ์ธํ๋ค.
- ๋ง๋ค๋ฉด ๊ทธ ๊ธธ์ด๋ฅผ ์ ์ฅํ๊ณ ์๋๋ผ๋ฉด 3๋ฒ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
- ๋ง์ง๋ง ๋ฌธ์์์ ์ฒ์ ์์๋ฌธ์๊น์ง ๋์ฐฉํ๋ฉด ์ฒ์์์ ๋ค์ ๋ฌธ์๋ก ์ด๋ํ๊ณ 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
}