Javascript

[JS] 중복되지 않는 알파벳으로 이루어진 가장 긴 문자열 찾기

mark340 2022. 12. 31. 12:20

# 문제
String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요.

str: 텍스트
return: 중복되지 않은 알파벳 길이 (숫자 반환)

예를 들어,
str = "abcabcabc"
return 은 3
=> 'abc' 가 제일 길기 때문

str = "aaaaa"
return 은 1
=> 'a' 가 제일 길기 때문

str = "sttrg"
return 은 3
=> 'trg' 가 제일 길기 때문


reduce,, for,, forEach,, 재귀함수 등 여러가지 알고있는 방법 총 동원하여 며칠 씨름하다 해결完,,,

 

충분히 해결할 수 있는 문제였는데 막무가내 식으로 접근하니 코드가 꼬이고 생각도 꼬이는 구나,,

초기에 어떻게 문제를 해결할지 우선적으로 생각해보고 설계를 잘 하는게 중요,,

 

const getLengthOfStr = str => {
  let word = [];   // 1.중복되지 않는 알파벳을 담을 배열 생성
  let count = 0;   // 2.문자열의 길이 변수 생성

  for(let i in str){  // 3.입력된 문자열의 길이 만큼 반복
    if(word.indexOf(str[i]) === -1){  // 4. word 배열에 알파벳 문자열이 없을 경우.(초기값 해당)
      word.push(str[i])  // 4-1. word 배열에 알파벳 추가.
      if(count < word.length){  // 4-2. count변수값이 알파벳 배열의 길이보다 작을 경우. (초기 0)
        count = word.length  // 4-3.count 변수의 값을 알파벳 배열의 길이로.
      }
    } else { //5. word 배열에 중복된 알파벳이 있을경우
      word = word.slice(word.indexOf(str[i]) + 1); 
      //6.중복된 알파벳을 word배열에서 찾아서 그 다음 문자열부터 새로운 배열을 생성함(slice + 1) 
      //이 부분 굉장히 헷갈리는 부분이니 집중요망.
      word.push(str[i]); // 6-1. slice로 만들어진 새배열에 중복된 문자열 넣기
    } 
  };

  return count // 7.중복되지 않는 알파벳의 길이가 가장 클 경우의 값을 반환 (8번째 줄 참조)
};

getLengthOfStr('sttrg')