題目: LeetCode - 290. Word Pattern

題目說明

給兩個字串 patternstr 分別代表單詞的組成模式及單詞組成。求單詞組成是否符合組成模式。

解題思路

使用 Stringstream 來分割 str,Unordered_map 紀錄組成模式及對應的字串,Unordered_set 避免兩個 key 對應到同一個字串,接著遍歷 pattern,若是碰到兩種 key 對應到同一個字串或是 val 與當前讀取到的字串不相等則回傳 False,最後判斷 str 是否已經全部處理,若是沒有代表 pattern 的長度不夠,此時也是回傳 False。

參考解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public:
bool wordPattern(string pattern, string str)
{
string tmp;
stringstream ss(str);
unordered_map<char, string> m;
unordered_set<string> s;
for(auto c : pattern)
{
ss >> tmp;
// two keys to one val || not right val
if(!m.count(c) && s.count(tmp) || m.count(c) && tmp != m[c]) return false;
m[c] = tmp, s.insert(tmp);
}
return ss.eof() ? true : false;
}
};