解题思路:
同时遍历pattern和str,观察字符与对应单词的数量是否一直保持一致。
pattern的字母数量与Word的单词数量不一致时,返回false
原题目:
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.
AC解,C++代码,菜鸟一个,请大家多多指正
class Solution {
public:
bool wordPattern(string pattern, string str) {
map<char, vector<string::size_type>> pmap;
map<string, vector<string::size_type>> smap;
int word_count = 0;
string::size_type str_ix = 0;
string word;
for (string::size_type pix = 0; pix != pattern.size(); pix++) {
pmap[pattern[pix]].push_back(pix);
word.clear();
while (str_ix != str.size() && str[str_ix] != ' ') {
word += str[str_ix];
str_ix++;
}
smap[word].push_back(word_count);
word_count++;
if (pmap[pattern[pix]] != smap[word]) {
return false;
}
if (str_ix != str.size()) {
str_ix++;
}
else {
break;
}
}
if (str_ix != str.size() || word_count != pattern.size()) {
return false;
}
return true;
}
};