You are given a string word
. A character is considered special if it appears in both lowercase and uppercase forms within the string.
Your task is to count the number of unique special characters in the given string.
Input: word = "aaAbcBC"
Output: 3
Input: word = "abc"
Output: 0
Input: word = "abBCab"
Output: 1
function countSpecialCharactersSets(word) {
const lowerSet = new Set();
const upperSet = new Set();
for (const char of word) {
if (char === char.toLowerCase()) {
lowerSet.add(char);
} else {
upperSet.add(char.toLowerCase());
}
}
let specialCount = 0;
for (const char of lowerSet) {
if (upperSet.has(char)) {
specialCount++;
}
}
return specialCount;
}
const word1 = "aaAbcBC";
countSpecialCharactersSets(word1); //output: 3
const word2 = "abc";
countSpecialCharactersSets(word2); //output: 0
const word3 = "abBCab";
countSpecialCharactersSets(word3); //output: 1
function countSpecialCharactersFrequency(word) {
const lowerFreq = new Array(26).fill(false);
const upperFreq = new Array(26).fill(false);
for (const char of word) {
if (char === char.toLowerCase()) {
lowerFreq[char.charCodeAt(0) - 'a'.charCodeAt(0)] = true;
} else {
upperFreq[char.charCodeAt(0) - 'A'.charCodeAt(0)] = true;
}
}
let specialCount = 0;
for (let i = 0; i < 26; i++) {
if (lowerFreq[i] && upperFreq[i]) {
specialCount++;
}
}
return specialCount;
}
const word1 = "aaAbcBC";
countSpecialCharactersFrequency(word1); //output: 3
const word2 = "abc";
countSpecialCharactersFrequency(word2); //output: 0
const word3 = "abBCab";
countSpecialCharactersFrequency(word3); //output: 1
function countSpecialCharactersMap(word) {
const charMap = new Map();
for (const char of word) {
const lowerChar = char.toLowerCase();
const isUpper = char === char.toUpperCase();
if (!charMap.has(lowerChar)) {
charMap.set(lowerChar, { lower: false, upper: false });
}
if (isUpper) {
charMap.get(lowerChar).upper = true;
} else {
charMap.get(lowerChar).lower = true;
}
}
let specialCount = 0;
for (const [_, { lower, upper }] of charMap) {
if (lower && upper) {
specialCount++;
}
}
return specialCount;
}
const word1 = "aaAbcBC";
countSpecialCharactersMap(word1); //output: 3
const word2 = "abc";
countSpecialCharactersMap(word2); //output: 0
const word3 = "abBCab";
countSpecialCharactersMap(word3); //output: 1
function countSpecialCharactersRegex(word) {
const uniqueChars = new Set(word.toLowerCase());
let specialCount = 0;
uniqueChars.forEach(char => {
const lowerMatch = new RegExp(char, 'g').test(word);
const upperMatch = new RegExp(char.toUpperCase(), 'g').test(word);
if (lowerMatch && upperMatch) {
specialCount++;
}
});
return specialCount;
}
const word1 = "aaAbcBC";
countSpecialCharactersRegex(word1); //output: 3
const word2 = "abc";
countSpecialCharactersRegex(word2); //output: 0
const word3 = "abBCab";
countSpecialCharactersRegex(word3); //output: 1
function countSpecialCharactersIndexOf(word) {
const uniqueChars = new Set(word.toLowerCase());
let specialCount = 0;
for (const char of uniqueChars) {
if (word.indexOf(char) !== -1 && word.indexOf(char.toUpperCase()) !== -1) {
specialCount++;
}
}
return specialCount;
}
const word1 = "aaAbcBC";
countSpecialCharactersIndexOf(word1); //output: 3
const word2 = "abc";
countSpecialCharactersIndexOf(word2); //output: 0
const word3 = "abBCab";
countSpecialCharactersIndexOf(word3); //output: 1
function countSpecialCharactersSetIntersection(word) {
const lowerSet = new Set();
const upperSet = new Set();
for (const char of word) {
if (char === char.toLowerCase()) {
lowerSet.add(char);
} else {
upperSet.add(char.toLowerCase());
}
}
const intersection = [...lowerSet].filter(char => upperSet.has(char));
return intersection.length;
}
const word1 = "aaAbcBC";
countSpecialCharactersSetIntersection(word1); //output: 3
const word2 = "abc";
countSpecialCharactersSetIntersection(word2); //output: 0
const word3 = "abBCab";
countSpecialCharactersSetIntersection(word3); //output: 1