예시 : abbcb
를 점검할 때.
abcbb
를 검사한다 -> abcb
, bcbb
를 검사한다 -> abb
, bbc
, bcb
를 검사한다.
반복한다.
step 1: 검사할 길이 len
을 정의한다.
step 2: len
만큼 잘라낸 문자열들을 검사한다.
function solution(s) {
const check = (s) => {
for (let i = 0; i < Math.floor(s.length / 2); i++) {
if (s[i] !== s[s.length - 1 - i]) return false;
}
return true;
};
let len = s.length;
if (check(s)) return len;
while (--len > 2) {
for (let i = 0; i <= s.length - len; i++) {
const str = s.substring(i, len + i);
if (check(str)) return len;
}
}
return 1;
}
팰린드롬인지 판단하는 함수 check는 아래와 같이 작성하면 더 간결하다.
const check = s => s === s.split("").reverse().join("");
다만 문자열이 길어질수록 시간도 길어지는 검사법이라 다르게 작성했다.
가장 긴 길이부터 시작해서 일일이 검사하는 방법 외에는 묘수가 안 보였다.
더 좋은 방법도 있지 않을까?