Find Resultant Array After Removing Anagrams
EasyArrayHash TableStringSorting
Solution
class CharCounter extends Map<string, number> {
constructor(s: string) {
super();
for (const char of s) {
this.add(char);
}
}
get(char: string): number {
return super.get(char) ?? 0;
}
add(char: string): void {
super.set(char, this.get(char) + 1);
}
isAnagram(charCounter: CharCounter): boolean {
if (this.size !== charCounter.size) {
return false;
}
for (const [char, count] of this.entries()) {
if (count !== charCounter.get(char)) {
return false;
}
}
return true;
}
}
export function removeAnagrams(words: string[]): string[] {
const answer: string[] = [];
let prevCharCounter = new CharCounter('');
for (const word of words) {
const charCounter = new CharCounter(word);
if (!prevCharCounter.isAnagram(charCounter)) {
answer.push(word);
prevCharCounter = charCounter;
}
}
return answer;
}