중복되지 않은 알파벳으로 이루어진 제일 긴 단어 찾아보자!
String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요.
str: 텍스트
return: 중복되지 않은 알파벳 길이 (숫자 반환)
예를 들어,
str = "abcabcabc"
return 은 3
=> 'abc' 가 제일 길기 때문
str = "aaaaa"
return 은 1
=> 'a' 가 제일 길기 때문
str = "sttrg"
return 은 3
=> 'trg' 가 제일 길기 때문
const getLengthOfStr = str => { // 아래 코드를 작성해주세요. if(str === ""){ return 0; } let arr = []; let newStr = ""; for(let i in str){ if(newStr.includes(str[i])){ newStr = newStr.slice(newStr.indexOf(str[i]+1)); } newStr += str[i]; arr.push(newStr.length); } return Math.max(...arr); }
먼저 문제를 보면 str인자는 string 형태이다.
우리는 중복되지 않게, 제일 긴 단어 라는 조건을 확인 할 수 있었다.
코드 하나하나 살펴보자
새로운 배열을 변수:(arr)선언 / 새로운 문자열 선언 변수:(newStr)
새로운 빈 문자열에 기존 문자열 인덱스를 제외하고 자른다
+1 = 인덱스는 0부터 시작하기에
만약 새로운 string이 기존 str의 단어를 가지고 있을 경우
새로운 String에 기존 단어가 포함된 index를 제외하고 자른다 indexOf
사용 !!
빈 문자열에 기존 문자열 i를 더 하고 새로운 배열이 배열 끝에 요소를 Push하고, 새로운 문자열 newStr
의 길이를 담아줬다.
arr은 이제 빈 배열이 아니다. 새로운 배열 arr에 기존 str인자를 받았고, 제일 긴 단어를 찾기 위해서 Math.Max()
함수를 사용했다.
배열에 요소가 너무 많으면 잘못된 결과를 반환되어서 (...)을 사용했다.
자세한건 아래 링크를 다시 한 번 참고하자!
그런데, 2번째 배열이 에러가 ?????
그렇다 2번째는 하필 공백이였다. 맨 위에 함수안에다가 조건문으로
str이 공백이라면 return 0을 반환 해주어 마무리 !
이번 알고리즘 코드카타는 정말 어렵기도 했고 시간이 많이 걸렸다..
다시 한 번 복습 해보는 시간을 가져야겠다.