-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path290-word-pattern.swift
More file actions
38 lines (32 loc) · 1.13 KB
/
Copy path290-word-pattern.swift
File metadata and controls
38 lines (32 loc) · 1.13 KB
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
class Solution {
func wordPattern(_ pattern: String, _ s: String) -> Bool {
_wordPattern(Array(pattern), Array(s))
}
func _wordPattern(_ pattern: [Character], _ s: [Character]) -> Bool {
var patternToToken = [Character: [Character]]()
var tokenToPattern = [[Character]: Character]()
var (i, j) = (0, 0)
while i < pattern.count && j < s.count {
var token = [Character]()
while j < s.count && s[j] != " " {
token.append(s[j])
j += 1
}
if j < s.count && s[j] == " " {
j += 1
}
if tokenToPattern[token] != nil && tokenToPattern[token] != pattern[i] {
return false
} else {
tokenToPattern[token] = pattern[i]
}
if patternToToken[pattern[i]] != nil && patternToToken[pattern[i]] != token {
return false
} else {
patternToToken[pattern[i]] = token
}
i += 1
}
return i == pattern.count && j == s.count
}
}