예시 문자열: 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);
}