회문문자열(투포인트, 문자열활용)

문자열 s가 주어지면 최대문자 1개까지 지워서 회문문자열이 되면 성공, 되지 않으면 실패다.

1. 생각

틀린 부분을 먼저 left 와 right를 체크해서 틀린 부분에서 substring 을 자르고 substring을 거꾸로해서 일치하는 지 확인한다. 만약 일치하면 정답이고 아니라면 정답이 아니다.


function solution(str){
  let left=0,right=str.length-1;
  
  while(left<right){
    if(str[left]!==str[right]){
      // 다른 경우
      str=str.substring(left+1,right);
      if(str!==str.split('').reverse().join(''))
        return false;
    }
    else{
      left++;
      right--;
    }
  
  }
  return true;
}

console.log(solution("abcdccacba"));   
// console.log(solution("abcabbakcba"));                                                                                                                

test-case) abcdba 에 대해 문제가 생긴다.

cd에서 걸리기 때문에 substring(left+1, right) 가 성립이 되지 않는다.

해결 방안

만약, left가 중앙인 경우에만 체크하게끔 했고,
false를 return 하게끔 했다.

      if(left!==parseInt(str.length/2)){
        str=str.substring(left+1,right);
        if(str!==str.split('').reverse().join(''))
          return false;
      }

좋은 웹페이지 즐겨찾기