String 형인 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환
반복문을 통해서 해당 문자열을 새로운 배열에 넣어준다.
그러다 중복이 발생하면 splice 함수를 통해 지금까지 들어간 배열을 잘라준다.
그 배열의 길이를 {현재 길이} 라는 변수에 넣어주고,
{최고 길이} 변수와 비교해 가장 숫자가 높은 변수의 값을 출력한다.
const getLengthOfStr = str => { const arr = []; let mostLength = 0; let presentLength = 0; for (let i = 0; i<str.length; i++) { if (arr.indexOf(str[i]) === -1) { arr.push(str[i]) } else if (arr.indexOf(str[i]) !== -1) { presentLength = arr.splice(0,arr.indexOf(str[i])).length if (mostLength >= presentLength) { presentLength = 0 } else { mostLength = presentLength } arr.push(str[i]) } } if (mostLength >= arr.length) { return mostLength } else { return arr.length } }
배열을 출력하라는 것이 아닌 가장 긴 단어의 길이를 반환하라 해서
숫자를 비교하는 방식으로 길이를 재 봤다.
하지만 (abcdefghijcklmnop) 와 같은 문자열이 들어왔을 때
c를 중복값으로 잡고 넘겨버리는 탓에 이런 문자열이 들어왔을 때는 오류를 보여줬다.
const getLengthOfStr = str => { let arr = []; let newTxt = ""; if(str.length === 0) { return 0; } for (let i in str) { if(newTxt.includes(str[i])){ newTxt = newTxt.slice(newTxt.indexOf(str[i]) + 1); } newTxt = newTxt + str[i]; arry.push(newTxt.length); } return Math.max(...arr); }
이 방법은 각 배열의 길이를 저장해서 가장 큰 수의 값을 리턴하는 방식이다.
arr
과 newTxt
라는 변수를 각각 설정해주고,
includes
함수를 이용해 텍스트에 중복 되는 값이 있다면
해당 값의 앞을 날리고 그 뒤로 계속해서 진행한다.
그 때마다 배열의 길이를 arry
로 저장시켜 준다.
모든 실행이 종료되면 Math.max()
를 통해서 가장 긴 값을 찾아준다.
중복값을 찾아서 해당 값까지의 배열 길이를 이용하려 했던 것은 비슷하나,
그 뒤의 과정들을 제대로 처리하지 못했던 차이가 있었던 것 같다