newStr
'str[0]+ str[1] + ... str[i-1]'
를 담아주게될 변수beforeStr
를 선언해주고 newStr[0]
을 담아준다. 'str[0]+ str[1] + ... str[i-1]'
에 str[i]
가 포함되었는지 여부를 판단해야 함 includes()
beforeStr.includes(str[i])
가 참일 경우에는 알파벳이 중복되어 사용된 문자열이기 때문에 바로 false를 반환해줌string 메서드인 includes()
를 이용해서 풀었다.
function isIsogram(str) {
if(str.length === 0) {
return true
}
const newStr = str.toUpperCase();
let beforeStr = newStr[0];
for (let i = 1; i < newStr.length; i++) {
if(beforeStr.includes(newStr[i])) {
return false
}
beforeStr += newStr[i]
}
return true
}
레퍼런스 코드를 살펴보니, 객체의 키를 이용해서 풀었다. 빈 객체를 선언해준다음, 반복문 안에서 객체에 문자열의 i번째 요소를 키로한 값이 있는지 여부를 판별한다.
function isIsogram(str) {
if (str.length === 0) {
return true;
}
let cache = {}; //빈 객체를 생성
let strLowered = str.toLowerCase(); //입력받은 문자열을 소문자로
for (let i = 0; i < strLowered.length; i++) {
if (cache[strLowered[i]]) {//조건에 해당하는 경우(키값이 true인 경우 바로 false 리턴)
return false;
}
//cache라는 배열에 strLowered[i]의 키값이 없으면 undefined(falshy)여서 다음줄로 넘어감
cache[strLowered[i]] = true; // 해당 키값으로 true를 넣어준다.
}
//중복되는 키값이 없어서 반복문을 모두 순회하고 빠져나온 경우 true를 반환한다.
return true;
}