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.
1 class Solution { 2 public: 3 bool wordPattern(string pattern, string str) { 4 istringstream strcin(str); 5 string s; 6 vector<string> vs; 7 while(strcin >> s) vs.push_back(s); 8 if (pattern.size() != vs.size()) return false; 9 map<string, char> s2c; 10 map<char, string> c2s; 11 for (int i = 0; i < vs.size(); ++i) { 12 if (s2c[vs[i]] == 0 && c2s[pattern[i]] == "") { 13 s2c[vs[i]] = pattern[i]; 14 c2s[pattern[i]] = vs[i]; 15 continue; 16 } 17 if (s2c[vs[i]] != pattern[i]) return false; 18 } 19 return true; 20 } 21 };