[프로그래머스 Level 3] 가장 긴 팰린드롬
1분 읽기
풀이 1: 완전 탐색 + 투 포인터(축소)
function solution(s){
let max_len = 0;
// 중앙으로 좁혀나가며 팰린드롬 검사
function isPalindrome(left, right){
while(left < right){
if(s[left] !== s[right]) return false;
left++;
right--;
}
return true;
}
// 가장 긴 길이부터 검사
for(let i = s.length; i > 0; i--){
if(max_len > i) break;
for(let j = 0; j + i <= s.length; j++){
if(isPalindrome(j, j + i - 1)){
max_len = Math.max(max_len, i);
}
}
}
return max_len;
}풀이 2: 완전 탐색 + 투 포인터(확장)
function solution(s) {
let max_len = 0;
// 좌우로 확장시켜나가며 팰린드롬 검사
function expand(left, right = left) {
while(left >= 0 && right < s.length) {
if(s[left] !== s[right]) break;
left--;
right++;
}
return right - left - 1;
}
for(let i = 0; i < s.length; i++) {
max_len = Math.max(
max_len,
expand(i), // 홀수 팰린드롬
expand(i, i + 1), // 짝수 팰린드롬
);
}
return max_len;
}Two Pointers7편 중 6번째
관련 글
4분 읽기
소수 구하기
소수 판별법과 소수를 구하는 알고리즘을 정리합니다.
1분 읽기
[프로그래머스 Level 2] 미로 탈출
프로그래머스 미로 탈출을 BFS로 풀이합니다.
1분 읽기
[프로그래머스 Level 2] 마법의 엘리베이터
프로그래머스 마법의 엘리베이터를 자리수 그리디로 풀이합니다.