-
Notifications
You must be signed in to change notification settings - Fork 0
/
242_Valid_Anagram.swift
54 lines (40 loc) · 1.26 KB
/
242_Valid_Anagram.swift
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/*
Done: 27.08.2023. Revisited: N/A
Given two strings s and t, return true if t is an anagram of s, and false otherwise.
An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.
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 a case?
*/
import Foundation
// Option 1 - O(s+t), Memory O(s+t)
func isAnagram(_ s: String, _ t: String) -> Bool {
if s.count != t.count {
return false
}
var sSet = Dictionary<Character, Int>() // // "aacc" (a: 2, c: 2)
for ch in s {
sSet[ch] = 1 + (sSet[ch] ?? 0)
}
var tSet = Dictionary<Character, Int>() // // "ccac" (c: 3, a: 1)
for ch in t {
tSet[ch] = 1 + (tSet[ch] ?? 0)
}
for item in sSet {
if item.value != tSet[item.key] {
return false
}
}
return true
}
// Option 2 - O(n^2) / O(nlogn)
func isAnagram2(_ s: String, _ t: String) -> Bool {
return s.sorted() == t.sorted()
}