--- title: '242. Valid Anagram' description: Given two strings s and t, return true if t is an anagram of s, and false otherwise icon: dot topics: - { name: "Hash Table", slug: "hash-table" } - { name: "String", slug: "string" } - { name: "Sorting", slug: "sorting" } video: "9UtInBqnCgA" sidebar: label: 'Valid Anagram' badge: 'Easy' --- ::::warning What if the inputs contain Unicode characters? How would you adapt your solution to such a case? :::: ### Example 1: - Input: `s = "anagram", t = "nagaram"` - Output: `true` ### Example 2: - Input: `s = "rat", t = "car"` - Output: `false` ### Constraints: - `1 <= s.length, t.length <= 5 * 10^4` - `s` and `t` consist of lowercase English letters. ## Approach ```mermaid flowchart TD S(["isAnagram(s, t)"]) --> I["freq: count every char of s"] I --> L{"more char c in t?"} L -- no --> E(["return true"]) L -- yes --> Q{"freq[c] missing or 0?"} Q -- yes --> R(["return false — t has a char s cannot cover"]) Q -- no --> D["freq[c] -= 1"] D --> L ``` ## Solution ```js /** * @param {string} s * @param {string} t * @return {boolean} */ var isAnagram = function(s, t) { let freq = {}; for (let c of s) freq[c] = (freq[c] || 0) + 1; for (let c of t) { if(!freq[c] || freq[c] === 0){ return false; } freq[c] = freq[c] - 1; } return true; }; ```