String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요.
str: 텍스트
return: 중복되지 않은 알파벳 길이 (숫자 반환)
예를 들어,
str = "abcabcabc"
return 은 3
=> 'abc' 가 제일 길기 때문
str = "aaaaa"
return 은 1
=> 'a' 가 제일 길기 때문
str = "sttrg"
return 은 3
=> 'trg' 가 제일 길기 때문
const getLengthOfStr = str => {
let newStr = "";
let maxArr = [0];
for (i = 0; i < str.length; i++) {
if (newStr.indexOf(str[i]) === -1) {
newStr = newStr + str[i];
if (i === str.length - 1) {
maxArr.push(newStr.length);
}
} else {
maxArr.push(newStr.length);
newStr = newStr.slice(newStr.indexOf(str[i])+1) + str[i]
}
}
return Math.max(...maxArr)
}
newStr 과 배열 newArr 를 선언한다. for 안에서 str의 글자 하나하나를 index 로 접근해서indexOf(str[i]) === -1 이면) newStr과 str[i]를 결합한다.push 한다.newStr.indexOf로 newStr 안 중복되는 str[i]의 위치를 찾아 처음부터 중복알파벳 까지는 삭제하고 중복알파벳 뒤쪽만 남기도록 한다.push 한다.Math.max 와 펼침 연산자를 사용해 return 한다.- 로직대로 알단 코드를 작성해보고 테스트 모듈을 run 했을 때 통과하지 못하는 경우를 하나씩 제거해가면서 코드를 수정했는데 마지막까지 case 하나를 통과하지 못했다. 시간이 나면 다시 고민해봐야겠다.
newStr = str[i] 로 초기화 하고 다음 반복으로 넘어가면 된다고 생각했는데, 그러면 abcdecfop 같은 문자열에서는 abcde / cfop 로 나누어 세게 되어서 오류가 발생하고 있었다!newStr = newStr.slice(newStr.indexOf(str[i])+1) + str[i] 으로 변경했더니 모든 테스트 케이스를 통과하였다.