-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathwordPattern.go
More file actions
41 lines (34 loc) · 1.1 KB
/
Copy pathwordPattern.go
File metadata and controls
41 lines (34 loc) · 1.1 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
37
38
39
40
41
/* https://leetcode.com/problems/word-pattern/#/description
Given a pattern and a string str, find if str follows the same pattern.
Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in str.
Examples:
pattern = "abba", str = "dog cat cat dog" should return true.
pattern = "abba", str = "dog cat cat fish" should return false.
pattern = "aaaa", str = "dog cat cat dog" should return false.
pattern = "abba", str = "dog dog dog dog" should return false.
Notes:
You may assume pattern contains only lowercase letters, and str contains lowercase letters separated by a single space.
*/
package lht
import "strings"
func wordPattern(pattern string, str string) bool {
words := strings.Split(str, " ")
if len(pattern) != len(words) {
return false
}
pmap := make(map[rune]string)
smap := make(map[string]rune)
for i, p := range pattern {
if v, ok := pmap[p]; !ok {
pmap[p] = words[i]
} else if v != words[i] {
return false
}
if v, ok := smap[words[i]]; !ok {
smap[words[i]] = p
} else if v != p {
return false
}
}
return true
}