중복된 알파벳이 없는 가장 긴 단어를 반환하는 문제다.
처음에는 예를 들어서 입력된 단어가 '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에 있는 요소들과
비교하면서 추가할지 제거할지 반복하는 코드이다.