Valid Anagram [Easy] — Frequency Counter
Advertisement
Problem Statement
Given strings s and t, return true if t is an anagram of s.
Input: s="anagram", t="nagaram" → true
Input: s="rat", t="car" → false
Intuition
Anagram = same characters with same frequencies. Count character occurrences in s, subtract for t. If all counts are 0, it's an anagram.
Solutions
C
bool isAnagram(char* s, char* t) {
int cnt[26]={};
while(*s) cnt[*s++-'a']++;
while(*t) cnt[*t++-'a']--;
for(int i=0;i<26;i++) if(cnt[i]) return false;
return true;
}
C++
bool isAnagram(string s, string t) {
if(s.size()!=t.size()) return false;
int cnt[26]={};
for(char c:s) cnt[c-'a']++;
for(char c:t) if(--cnt[c-'a']<0) return false;
return true;
}
Java
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length()) return false;
int[] cnt=new int[26];
for(char c:s.toCharArray()) cnt[c-'a']++;
for(char c:t.toCharArray()) if(--cnt[c-'a']<0) return false;
return true;
}
JavaScript
var isAnagram = function(s, t) {
if(s.length!==t.length) return false;
const cnt=new Array(26).fill(0);
for(const c of s) cnt[c.charCodeAt(0)-97]++;
for(const c of t) if(--cnt[c.charCodeAt(0)-97]<0) return false;
return true;
};
Python
from collections import Counter
def isAnagram(s: str, t: str) -> bool:
return Counter(s) == Counter(t)
Complexity
- Time: O(n), Space: O(1) — 26 chars
Follow-up: Unicode characters
Use a full HashMap instead of a 26-char array.
Advertisement