-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWord pattern.cpp
More file actions
78 lines (54 loc) · 2 KB
/
Word pattern.cpp
File metadata and controls
78 lines (54 loc) · 2 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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
Problem Link:https://leetcode.com/problems/word-pattern/
// Given a pattern and a string s, find if s 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 s. Specifically:
// Each letter in pattern maps to exactly one unique word in s.
// Each unique word in s maps to exactly one letter in pattern.
// No two letters map to the same word, and no two words map to the same letter.
// Example 1:
// Input: pattern = "abba", s = "dog cat cat dog"
// Output: true
// Explanation:
// The bijection can be established as:
// 'a' maps to "dog".
// 'b' maps to "cat".
// Example 2:
// Input: pattern = "abba", s = "dog cat cat fish"
// Output: false
// Example 3:
// Input: pattern = "aaaa", s = "dog cat cat dog"
// Output: false
// Constraints:
// 1 <= pattern.length <= 300
// pattern contains only lower-case English letters.
// 1 <= s.length <= 3000
// s contains only lowercase English letters and spaces ' '.
// s does not contain any leading or trailing spaces.
// All the words in s are separated by a single space.
class Solution {
public:
bool wordPattern(string pattern, string s) {
unordered_map<char, string> map;
unordered_map<string, int> count;
int i = 0;
for(int j = 0; j < pattern.length(); j++) {
string word = "";
for(; i < s.length() && s[i] != ' '; i++) {
word += s[i];
}
i++;
if(word == "")
return false;
if(map[pattern[j]] == "") {
map[pattern[j]] = word;
count[word]++;
if(count[word] > 1)
return false;
}
else if(map[pattern[j]] != word)
return false;
}
if(i < s.length())
return false;
return true;
}
};