거꾸로 해도 똑같은 즉 회문의 서브 스트링을 찾는 문제이다.
접근법
중간 난이도였으며, 투포인터를 통해 접근했다.풀이
/** * @param {string} s * @return {string} */ var longestPalindrome = function(s) { // twopointer const checking = (left, right, s) => { while(left <= right) { if (s[left] != s[right]) { return false; } left++; right--; } return true; } let max_length = 0; let max_L = 0; let max_R = 0; for (let i = 0; i < s.length; i++) { for (let j = i; j < s.length; j++) { if (s[i] == s[j] && j - i + 1 > max_length) { if (checking(i, j, s)) { max_length = j - i + 1; max_L = i; max_R = j; } } } } return s.slice(max_L, max_R + 1); };
요약
쉬웠던 문제라고 생각한다. 문자열의 i인덱스부터 시작해서 i이후에 같은 문자가 등장하는지 확인한 후 이 i부터j까지의 부분문자열이 회문인지 확인한다. 이후 회문이라면 left와 right를 저장하고 그 길이 또한 저장한다. 그 이후부터는 이미 확인한 회문의 길이보다 길지 않다면 갱신하지않고 그보다 길다면 다시 회문 확인을하는 방식을 반복하여 가장 긴 회문을 찾는다.