242 Valid Anagram

Given two strings s and t , write a function to determine if t is an anagram of s.

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 * 104
  • s and t consist of lowercase English letters.

Follow up: What if the inputs contain unicode characters? How would you adapt your solution to such case?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        if len(s) != len(t):
            return False
        m = [0] * 26
        for ch in s:
            m[ord(ch) - 97] += 1
        for ch in t:
            m[ord(ch) - 97] -= 1
        for i in m:
            if i != 0:
                return False
        return True


''' Fast version '''
class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        return set(Counter(s).items()) == set(Counter(t).items())


''' Short version '''
class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        return sorted(s) == sorted(t)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
func isAnagram(s string, t string) bool {
	if len(s) != len(t) {
		return false
	}

	var count [26]int
	for _, c := range s {
		count[c-'a']++
	}
	for _, c := range t {
		count[c-'a']--
		if count[c-'a'] < 0 {
			return false
		}
	}
	return true
}