解题思路:
(1)因为需要两两对应,因此使用map或者unordered_map,类型<char,string>
(2)遍历,每次查找在map中,是否同时存在pattern[i]和res[i](res表示切分后的字符串数组)
(3)若key存在,判断该key的value与res[i]是否相等,不等返回falsle
(4)若key不存在,判断res[i]是否存在map中,存在返回false
(5)若两者均不存在,入map
class Solution {
public:
bool wordPattern(string pattern, string str) {
//切分字符串
vector<string> res;
string result;
stringstream input(str);
while(input>>result) {
res.push_back(result);
}
/*
for (auto w:res) {
cout<<w<<endl;
}*/
if (res.size()!=pattern.length()) return false;
unordered_map<char,string> mymap;
for(int i=0;i<pattern.length();i++) {
if(mymap.find(pattern[i])==mymap.end()) { // key 不存在
if (!find_value(mymap,res[i])) { // value 不存在
mymap[pattern[i]]=res[i];
} else return false;
} else { //存在判断与现有的是否相等
if (mymap[pattern[i]]!=res[i]) return false;
}
}
return true;
}
bool find_value(unordered_map<char,string> &mymap,const string &value) {
for (auto w:mymap) {
if (w.second==value) return true;
}
return false;
}
};