String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요.
str: 텍스트
return: 중복되지 않은 알파벳 길이 (숫자 반환)
예를 들어,
str = "abcabcabc"
return 은 3
=> 'abc' 가 제일 길기 때문
str = "aaaaa"
return 은 1
=> 'a' 가 제일 길기 때문
str = "sttrg"
return 은 3
=> 'trg' 가 제일 길기 때문
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;
};
👉🏻 Array.slice() 시작 인덱스부터 선정 인덱스 바로 앞까지 잘라냄
👉🏻 Array.indexOf() 배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환하고 존재하지 않으면 -1을 반환
👉🏻 풀이
👉🏻 슬라이딩 윈도우 1
👉🏻 슬라이딩 윈도우 2
const getLengthOfStr = str => {
if (str === '') {
return 0
} else {
// 배열 중복 요소 체크 helper
function getUniques(array) { return [... new Set(array)]; }
let tempArr = [];
let resultArr = [];
// 각 알파벳 단위 자르기
for (let i = 0; i < str.length; i++) {
for(let j = str.length; j > i; j--) {
tempArr.push(str.slice(i,j));
}
}
// 길이 순 정렬
tempArr.sort((a, b) => a.length - b.length);
// 문자열 중복요소 체크 후 비교하여 새 배열 만듬
for(let i = 0; i < tempArr.length; i++) {
if(getUniques(tempArr[i].split("")).join("").length === tempArr[i].length) {
resultArr.push(tempArr[i]);
};
}
// 가장 긴 index 검색
let reseltIndex = resultArr.map(el => el.length);
return Math.max(...reseltIndex);
}
}
👉🏻 1. 알파벳을 자르는 경우를 배열화
👉🏻 2. 중복되는 알파벳의 경우를 제거해버린 후 1번 배열과 비교하여 새 배열제작
👉🏻 3. 결과 배열에서 가장 긴 길이 요소 검색
👉🏻 4. 슬라이딩 윈도우 알고리즘 연습 필요