countDuplicate.js

Codewars 알고리즘 풀이


Problem

  • Write a function that will return the count of distinct case-insensitive alphabetic characters and numeric digits that occur more than once in the input string.
    • 입력 문자열에서 대소문자를 구분하지 않는 알파벳 문자와 숫자가 두 번 이상 나타나는 횟수를 반환한다.
  • The input string can be assumed to contain only alphabets (both uppercase and lowercase) and numeric digits.
    • 입력 문자열은 알파벳(대문자와 소문자)과 숫자만 포함할 수 있다.



Solution 01

function countDuplicate(str) {
  let sortStr = str.toLowerCase().split('').sort().join('');
  let temp = '';
  let count = 0;
  
  for (let i = 0; i < sortStr.length; i++) {
    if (sortStr[i] === sortStr[i + 1] && sortStr[i] !== temp) {
      temp = sortStr[i];
      count++;
      i++;
    }
  }
  return count;
}

countDuplicate('');      // 0
countDuplicate('abcd');  // 0
countDuplicate('aabb');  // 2
countDuplicate('AaBb');  // 2
countDuplicate('Aaaa');  // 1


Solution 02

function countDuplicate(str) {
  str = str.toLowerCase();
  let obj = {};
  let count = 0;
  
  for (let i = 0; i < str.length; i++) {
    if (obj[str[i]]) {
      obj[str[i]]++;
    } else {
      obj[str[i]] = 1;
    }
  }
  
  for (let j in obj) {
    if (obj[j] > 1) count++;
  }
  return count;
}

countDuplicate('');      // 0
countDuplicate('abcd');  // 0
countDuplicate('aabb');  // 2
countDuplicate('AaBb');  // 2
countDuplicate('Aaaa');  // 1


Solution 03

function countDuplicate(str) {
  return (str.toLowerCase().split('').sort().join('').match(/([^])\1+/g) || []).length;
}

countDuplicate('');      // 0
countDuplicate('abcd');  // 0
countDuplicate('aabb');  // 2
countDuplicate('AaBb');  // 2
countDuplicate('Aaaa');  // 1