String
형의 한 단어를 인자로 받아 그 안에서 중복되지 않은 알파벳으로 이어진 제일 긴 단어의 길이를 반환하는 문제이다. 문제가 처음엔 이해가 잘 안됬는데, 반환하는 제일 긴 단어 내에서 중복되는 알파벳이 없도록 해주면 되기에, 첫 글자를 기준으로 잡으면서 단어를 계속 만들어주는 과정을 거치면 될 것 같다고 생각하고 풀이를 진행했다.
const getLengthOfStr = (str) => {
let character = ""; // 문자열을 만들어줄 String 변수
let maxlength = [0]; // 각 단어의길이를 배열에 추가 (그 중 가장 긴 길이를 반환, 0은 배열이 빈 경우를 대비)
for (let i=0; i<str.length; i++){
character=str[i]; //문자열의 첫글자 지정
for(let j=i+1; j<str.length; j++){ // 다음 글자부터
if(character.includes(str[j])){ // 문자열에 해당 글자가 포함된다면 break
break;
}
else {
character+=str[j]; // 아닐 경우 문자열에 글자 추가
}
}
maxlength.push(character.length); // break 후의 글자 길이 배열에 추가
}
return Math.max(...maxlength); // 최대 길이 반환
}
느낀 점
처음부터 쉽게 접근이 되지 않았다, 결국 greedy한 방법으로 접근했고, 단어의 첫 글자부터 끝까지를 기준으로 잡으면서(첫번째 for), 문자열에 글자를 하나씩 추가해주며 중복여부를 체크해주며 중복된다면 당시의 길이를 배열에 하나씩 추가해주었다. 최종적으로 5글자의 단어라면 배열 안은 5개의 수가 담기며 그 중 가장 큰 값이 문제에서 요구하는 중복되지 않은 알파벳으로 이어진 제일 긴 단어의 길이를 반환하는 값이 된다. 더 좋은 풀이로 코드를 줄일 수 있거나 떠오른다면 고쳐보도록 해야겠다.