문자열에서 중복되지 않은 가장 긴 단어의 길이

이나영·2021년 9월 16일
0

알고리즘

목록 보기
1/8

예시 문자열: abcdbfgc

① 문자열을 앞에서부터 하나씩 읽어가며 빈 배열havingArr에 넣어준다.
havingArr: [a] -> [a, b] -> [a, b, c] -> ... -> [a, b, c, d, e, f, g]

② 만약 배열에 이미 존재하는 문자를 만난다면 배열havingArr의 길이를 길이 저장용으로 만들어둔 빈 배열lengArr에 push method를 이용해 저장시킨다.
lengArr: [7]

③ 배열havingArr 안에서 중복된 문자의 위치를 찾아 처음(index[0])부터 문자 위치까지를 잘라내 없앤다.
havingArr: [d, e, f, g]

④ 그러면 이후에 중복됐던 문자가 배열havingArr에 push 되더라도 배열havingArr는 다시 중복이 존재하지 않는 clean한 배열만 남는다.
havingArr: [d, e, f, g, c]

⑤ 이걸 반복하면 중복되지 않은 단어들의 길이가 배열lengArr에 쌓인다.

⑥ Math.max method를 이용해 배열 속에서 가장 큰 숫자를 걸러내 return해준다.

const getLengthOfStr = str => {

  let havingArr = [];
  let lengArr = []

  for(let i in str) {
    if(havingArr.includes(str[i])) {
      lengArr.push(havingArr.length);
      havingArr.splice(0, havingArr.indexOf(str[i]) + 1);
    }
    havingArr.push(str[i]);
  }

  lengArr.push(havingArr.length);
  
  return Math.max(...lengArr);
}

0개의 댓글