📝[プログラマー]最長のファリンドロン


千裕隣開発ブログの投稿。を参照し、解析済みと注記してください.

問題の説明


前後を逆さまにしても、同じ文字列を「回文」と呼ぶ.
文字列sが与えられた場合、解関数を完了し、sの部分文字列(Substring)の中で最も長いパリンドロン長を返します.
たとえば、文字列sがabcdcbaの場合、7が返され、abacdeの場合、3が返されます.

せいげんじょうけん

문자열 s의 길이 : 2,500 이하의 자연수

문자열 s는 알파벳 소문자로만 구성

I/O例



I/O例説明


I/O例#1
文字列sが4番目の「d」に対して空であるため、7を返します.
I/O例#2
2番目の位置「b」を基準に、「aba」はパリン症候群になるため、3に戻る.

私の答え

function solution(s) {
    // 앞뒤로 같은 수 만큼 연속되는 문자열을 모두 검사하는 코드
    // ex ) i === 7 ? 'abcdcba'
    // ex ) i === 6 ? 'abcdcb' , 'bcdcb' 
    // ...
    for(let i = s.length ; i > 0 ; i--) {
        for(let j = 0 ; j <= s.length - i ; j ++) {
            if(isPalindrome(s.slice(j,i+j))) return i
        }
    }
    
    function isPalindrome(str) {
        // 절반을 나누어 i 번째와 문자열의 끝에서 i-1 번째가 다르다면 팰린드롬 X
        const half = Math.floor(str.length/2)
        for(let i = 0 ; i < half ; i ++) {
            if(str[i] !== str[str.length-i-1]) return false
        }
        return true
    }
}