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

JavaScript로 문자열에서 가장 긴 연속 모음 부분 문자열의 길이 구하기

문제 정의

문자열을 하나 인자로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 오직 모음(a, e, i, o, u)으로만 이루어진 가장 긴 연속 부분 문자열(substring)의 길이를 반환해야 합니다.

예를 들어 입력 문자열이 'schooeal'이라면, 중간에 있는 'ooea'가 연속된 모음 4개로 이루어져 있으므로 결과는 4가 됩니다.

접근 방법

가장 효율적인 해결 방법은 문자열을 한 번만 순회하는 선형 탐색(O(n))입니다. 다음 두 개의 변수를 활용합니다.

  • cur: 현재 위치까지 이어지는 연속 모음의 개수
  • max: 지금까지 발견한 최대 연속 모음 길이

각 문자를 확인하면서 모음이면 cur을 1 증가시키고, max보다 커지면 갱신합니다. 모음이 아닌 문자를 만나면 cur을 0으로 초기화하여 새로운 카운트를 시작합니다.

예제 코드

const str = 'schooeal';

const findLongestVowel = (str = '') => {
  let cur = 0;
  let max = 0;

  for (let i = 0; i < str.length; ++i) {
    if ("aeiou".includes(str[i])) {
      cur++;
      if (cur > max) {
        max = cur;
      }
    } else {
      cur = 0;
    }
  }

  return max;
};

console.log(findLongestVowel(str));

실행 결과

4

코드 동작 원리

입력 문자열 'schooeal'을 기준으로 살펴보겠습니다.

  1. s, c, h는 모음이 아니므로 cur은 계속 0으로 유지됩니다.
  2. o, o, e, a는 연속된 모음이므로 cur이 1 → 2 → 3 → 4로 증가하고, max도 함께 4로 갱신됩니다.
  3. 마지막 l은 자음이므로 cur이 0으로 초기화되지만, 이미 기록된 max = 4는 그대로 유지됩니다.

따라서 함수는 최종적으로 4를 반환합니다.

정리

이 알고리즘은 문자열의 길이를 n이라 할 때 시간 복잡도 O(n), 공간 복잡도 O(1)로 매우 효율적입니다. 문자열을 한 번만 순회하면서 연속 조건을 만족하는 구간의 길이를 추적하는 패턴은 슬라이딩 윈도우나 카운터 기반 문제에서 널리 활용되는 기법이므로, 익혀두면 다양한 코딩 테스트 문제에 응용할 수 있습니다.