isIsogram.js (7kyu 18)

Codewars 알고리즘 풀이


Problem

  • An isogram is a word that has no repeating letters, consecutive or non-consecutive.
    • isogram은 반복되는 문자가 없다.
  • Ignore letter case.
    • 대소문자를 구분하지 않는다.


Solution 01

function isIsogram(str) {
   str = str.toLowerCase();
   
   for (let i = 0; i < str.length; i++) {
      for (let j = i + 1; j < str.length; j++) {
         if (str[i] === str[j]) {
            return false;
         }
      }
   }
   return true;
}

isIsogram('');           // true
isIsogram('isogram');    // true
isIsogram('isIsogram');  // false

toLowerCase(): 문자열을 소문자로 변환한다.


Solution 02

function isIsogram(str) {
   let arr = str.toLowerCase().split('').sort();
   
   for (let i = 0; i < arr.length - 1; i++) {
      if (arr[i] === arr[i + 1]) {
         return false;
      }
   }
   return true;
}

isIsogram('');           // true
isIsogram('isogram');    // true
isIsogram('isIsogram');  // false

split(): 문자열을 부분 문자열로 분할하고, 새 배열로 반환한다.

sort(): 배열의 element를 정렬한 후, 그 배열을 반환한다.


Solution 03

function isIsogram(str) {
   return !str.match(/([a-z]).*\1/i);
}

isIsogram('');           // true
isIsogram('isogram');    // true
isIsogram('isIsogram');  // false

match(): 문자열에서 정규식과 일치하는 문자를 검색하고, 배열로 반환한다.

.: 개행 문자를 제외한 모든 문자와 대응

*: 0회 이상 연속으로 반복되는 부분과 대응

\n: ??

i: 대소문자 구분 없는 검색