Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 한 글자를 삭제해 두 문자열이 일치하는지 확인하는 방법

두 개의 문자열 str1str2를 인수로 받는 JavaScript 함수를 작성해야 합니다.

이 함수의 역할은 str1에서 정확히 한 글자를 삭제했을 때 str2와 동일한 문자열을 만들 수 있는지 판별하는 것입니다. 가능하다면 true를, 그렇지 않다면 false를 반환하면 됩니다.

문제 예시

예를 들어 입력 문자열이 다음과 같다고 가정해 보겠습니다.

const str1 = 'chemistty';
const str2 = 'chemisty';

'chemistty'에서 가운데의 't' 하나를 제거하면 'chemisty'가 되므로, 기대되는 출력 결과는 다음과 같습니다.

const output = true;

구현 코드

다음은 이 문제를 해결하는 전체 코드입니다.

const str1 = 'chemistty';
const str2 = 'chemisty';

const stringSimilarity = (str1 = '', str2 = '') => {
  // 길이 차이가 정확히 1이 아니면 애초에 성립 불가
  if(str1.length - str2.length !== 1){
    return false;
  };
  // 각 위치의 문자를 하나씩 제거해 보며 비교
  for(let i = 0; i < str1.length; i++){
    const desired = str1.substring(0, i) + str1.substring(i + 1, str1.length);
    if(desired === str2){
      return true;
    };
  };
  return false;
};

console.log(stringSimilarity(str1, str2));

실행 결과

위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

true

코드 동작 원리

이 알고리즘은 크게 두 단계로 동작합니다.

1단계 — 길이 사전 검사: 두 문자열의 길이 차이가 정확히 1이 아니라면, 한 글자를 삭제해서 일치시키는 것 자체가 불가능하므로 즉시 false를 반환합니다. 이 조기 반환(early return) 덕분에 불필요한 반복 연산을 줄일 수 있습니다.

2단계 — 문자 제거 후 비교: 반복문을 돌면서 str1의 각 인덱스 위치에 있는 문자를 하나씩 제거한 새로운 문자열을 substring()으로 생성하고, 그 결과가 str2와 완전히 일치하는지 확인합니다. 일치하는 순간 true를 반환하고, 끝까지 일치하는 경우가 없다면 최종적으로 false를 반환합니다.

이 방식은 시간 복잡도가 O(n²)이지만, 코드가 직관적이고 이해하기 쉬워 대부분의 실용적인 상황에서 충분히 효율적입니다.