Valid Anagram [Easy] — Frequency Counter

Sanjeev SharmaSanjeev Sharma
2 min read

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

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro