본문 바로가기

Algorithm(Javascript)

알고리즘 문제 3

 

 

중복된 알파벳이 없는 가장 긴 단어를 반환하는 문제다. 

처음에는 예를 들어서 입력된 단어가 'abcdabc'이면 중복된 알파벳 없는 단어를 하나의 배열에 전부 다 담아서

그 값들 중에서 길이가 긴 값을 반환하려고 했다. 너무 비효율적이고 중간에 오류도 많이나서 포기했다.

모범 답안은 빈 배열에다가 문자열 요소를 하나씩 추가하다가 중복된 단어가 배열에 존재하면 중복된 단어 앞에서부터

배열을 slice를 한후 다시 추가하는 방식으로 풀이하는게 가장 깔끔하다는걸 검색해서 찾았다.

 

const getLengthOfStr = str => {
  let sliceStr = [];
  let lastStr = 0;
  for (let i = 0; i<str.length; i++) {
    if (sliceStr.indexOf(str[i]) === -1) {
      sliceStr.push(str[i]);

      if (lastStr < sliceStr.length) {
        lastStr = sliceStr.length;
      }
    } else {
      sliceStr = sliceStr.slice(sliceStr.indexOf(str[i]) + 1);
      sliceStr.push(str[i])
    }
  }
  return lastStr
}

 

sliceStr에다가 중복된 값이 없는걸 추가하면서 최대길이를 lastStr에다가 계속해서 갱신하는 코드다.

else구문은 중복된 요소가 배열에서 탐색되면 기존배열을 중복된 요소의 index앞에서 slice를 해서 재할당을 해준 후

다시 중복된 요소를 push해주는 코드이다. 바로 앞에 요소랑은 겹치는 요소가 없기에 계속해서 다시 str에 있는 요소들과 

비교하면서 추가할지 제거할지 반복하는 코드이다.

'Algorithm(Javascript)' 카테고리의 다른 글

알고리즘 문제 6  (0) 2021.10.25
알고리즘 문제 5  (0) 2021.10.22
알고리즘 문제 4  (0) 2021.10.21
알고리즘 문제 2  (0) 2021.10.19
알고리즘 문제 1  (0) 2021.10.19