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

JavaScript에서 문자열이 동일한 패턴으로 반복되는지 확인하는 방법

문제 소개

이번 포스팅에서는 JavaScript로 문자열이 특정 패턴의 반복으로 이루어져 있는지 판별하는 함수를 작성해 보겠습니다.

함수는 첫 번째이자 유일한 인자로 문자열 하나를 받으며, 해당 문자열이 동일한 문자열 조각이 여러 번 이어져 만들어진 것인지 확인해야 합니다.

만약 어떤 부분 문자열이 반복되어 전체 문자열을 구성하고 있다면 true를, 그렇지 않다면 false를 반환하면 됩니다.

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

const str = 'carcarcarcar';

이 경우 기대되는 출력 결과는 다음과 같습니다.

const output = true;

'car'라는 문자열이 네 번 반복되어 전체 문자열을 이루고 있기 때문입니다. 반대로 'abcdef'처럼 반복 패턴이 없는 문자열이라면 false가 반환됩니다.

구현 코드

다음은 위 로직을 구현한 코드입니다.

const str = 'carcarcarcar';
const isRepeating = (str = '') => {
    if (!str.length){
        return false
    };
    for(let j = 1; (j <= str.length / 2); j++){
        if (str.length % j != 0){
            continue
        };
        let flag = true;
        for(let i = j; i < str.length; ++ i){
            if(str[i] != str[i - j]){
                flag = false;
                break;
            };
        };
        if(flag){
            return true;
        };
    };
    return false;
};
console.log(isRepeating(str));

코드 동작 원리

  • 반복 단위가 될 수 있는 길이 j를 1부터 문자열 길이의 절반까지 순회합니다. 반복 패턴의 최대 길이는 전체 길이의 절반이므로 그 이상은 검사할 필요가 없습니다.
  • j가 문자열 전체 길이를 나누어 떨어뜨리지 못하면 해당 길이로는 문자열을 완전히 채울 수 없으므로 건너뜁니다.
  • 각 인덱스 i의 문자와 j칸 앞의 문자(i - j)를 비교하여 모든 위치에서 일치하는지 확인합니다.
  • 모든 비교가 통과하면 해당 패턴이 반복된다는 뜻이므로 즉시 true를 반환합니다.
  • 모든 후보 길이를 검사했는데도 일치하는 패턴이 없다면 false를 반환합니다.

또한 빈 문자열이 입력될 경우 반복 패턴이 존재할 수 없으므로 처음에 false를 반환하도록 처리했습니다.

실행 결과

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

true

'carcarcarcar'는 'car'가 4번 반복된 문자열이므로 true가 출력되는 것을 확인할 수 있습니다.