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.
思路:使用两个map记录是否pattern和str匹配。
注意,map的键值这里不能为0,因为为0时map默认是访问了未创建过的键,因此要从1开始。
此外,for循环里真的可以实现很多东西,用好了会让代码很精简。
1 class Solution { 2 public: 3 bool wordPattern(string pattern, string str) { 4 map<char, int> dict1; 5 map<string, int> dict2; 6 stringstream ss(str); 7 int i = 0, n = pattern.size(); 8 for (string word; ss >> word; i++) 9 { 10 if (i == n || dict1[pattern[i]] != dict2[word]) 11 return false; 12 dict1[pattern[i]] = dict2[word] = i + 1; 13 } 14 return i == n; 15 } 16 };
时间: 2024-11-01 14:45:40