Algorithm - 중복되지 않은 가장 긴 단어의 길이

박태환·2021년 7월 24일
0

Algorithm

목록 보기
2/20
post-thumbnail

문제 설명

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

입출력 예

  • str = "abcabcabc"
    return 은 3
    => 'abc' 가 제일 길기 때문

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

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

나의 풀이

const getLengthOfStr = str => {
  
  let arry = [];
  let newTxt = '';
  if(str.length === 0) {
    return 0;
  }
  for (let i in str) {
    if(newTxt.includes(str[i])){
      newTxt = newTxt.slice(newTxt.indexOf(str[i]) + 1);
    }
    newTxt = newTxt + str[i];
    arry.push(newTxt.length);
  }
  return Math.max(...arry);

}

풀이 설명

일단 빈 배열과 빈 문자열을 하나씩 만들어 둔다. 혹시나 들어오는 문자열의 길이가 0이라면 그대로 0을 반환하도록 해준다.

let arry = [];
  let newTxt = '';
  if(str.length === 0) {
    return 0;
  }

들어오는 글자를 하나씩 빈 문자열(newTxt)에 추가 시키고 그 길이를 빈 배열(arry)에 추가한다.

newTxt = newTxt + str[i];
    arry.push(newTxt.length);

하나씩 추가로 빈 문자열에 들어오다가 같은 문자가 들어온다면 그 문자열은 다시 빈 문자열로 초기화 되도록 해준다.

if(newTxt.includes(str[i])){
      newTxt = newTxt.slice(newTxt.indexOf(str[i]) + 1);
    }

문자열의 길이만큼 다 돌았다면 마지막으로 문자열의 길이를 하나씩 저장해놨던 배열 중 가장 큰 수를 구한다.

return Math.max(...arry);

느낀 점

알고리즘도 창의력이 필요하다는 걸 느꼈다.
주어진 인자를 그대로 변환하는 것이 아닌 새로운 배열이나 새로운 문자열을 만들어 집어넣는 방법이 많이 보이는 것 같다. 잘 기억해야겠다.

profile
mekemeke

0개의 댓글