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