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

JavaScript로 문자열에서 가장 긴 연속 반복 문자와 그 길이 찾기

문제 소개

문자열을 입력받아 처리하는 JavaScript 함수를 작성해야 합니다. 이 함수는 정확히 두 개의 요소를 가진 배열을 반환해야 하며, 첫 번째 요소는 문자열에서 연속으로 가장 많이 나타나는 문자, 두 번째 요소는 해당 문자가 연속으로 나타난 횟수입니다.

예를 들어, 'tdfdffddffsdsfffffsdsdsddddd'라는 문자열이 주어졌다면, 'f'가 5번 연속으로 나타나므로 ['f', 5]를 반환해야 합니다.

예제 코드

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

const str = 'tdfdffddffsdsfffffsdsdsddddd';
const findConsecutiveCount = (str = '') => {
    let res='';
    let count=1;
    let arr = []
    for (let i=0;i<str.length;i++){
       if (str[i]===str[i+1]){
          count++
       } else {
          if (arr.every(v=>v<count)){
             res=str[i]+count
          }
          arr.push(count)
          count=1
       }
   }
   return !res?['',0]:[res.slice(0,1),res.slice(1)*1];
};
console.log(findConsecutiveCount(str));

실행 결과

['f', 5]

코드 동작 원리

이 알고리즘은 문자열을 한 번만 순회하면서(O(n)) 문제를 해결합니다. 핵심 로직은 다음과 같습니다.

1. 연속 횟수 카운팅: 현재 문자 str[i]와 다음 문자 str[i+1]이 같으면 count 변수를 1씩 증가시켜 연속 등장 횟수를 추적합니다.

2. 최댓값 비교: 연속 구간이 끊기는 시점에, arr 배열에 저장된 지금까지의 모든 연속 횟수보다 현재 count가 큰 경우(arr.every(v => v < count)) 해당 문자와 횟수를 res에 기록합니다.

3. 결과 반환: 마지막에는 res 값을 파싱하여 [문자, 횟수] 형태의 배열로 반환합니다. 만약 빈 문자열이 입력되어 res가 비어 있다면 ['', 0]을 반환하도록 처리했습니다.

마무리

이처럼 단순한 순회와 조건 비교만으로도 문자열 내 최장 연속 반복 문자를 효율적으로 찾을 수 있습니다. 추가적으로 Map 객체나 정규표현식을 활용하는 방법도 있으니, 상황에 맞게 응용해 보시기 바랍니다.