//使用map构建pattern与单词之间的关系,使用set确保关系一一对应
class Solution {
public:
bool wordPattern(string pattern, string str) {
vector<string> input;
int cnt = 0;
map<char, string> record;
set<string> helper;
for (int i = 0; i < str.length();) {
while (str[i + cnt] != ' ' && (i + cnt) < str.length()) {
cnt++;
}
input.push_back(str.substr(i, cnt));
i += (cnt + 1);
cnt = 0;
}
if (input.size() != pattern.length()) return false;
for (int i = 0; i<pattern.length(); i++) {
if (record.find(pattern[i]) == record.end()) {//不存在
if (helper.find(input[i]) != helper.end()) {//已经建立过了
return false;
}
record.insert(make_pair(pattern[i], input[i]));
helper.insert(input[i]);
}
else if (record[pattern[i]] != input[i]) {
return false;
}
}
return true;
}
};
int main()
{
Solution sol;
string pattern = "abba", s = "cat dog dog cat";
cout << sol.wordPattern(pattern, s);
cout<< endl;
return 0;
}