原文题目:
读题:
看到这种一一映射,很自然想到STL中的map容器
具体解题思路看代码注释
class Solution { public: bool wordPattern(string pattern, string str) { unordered_map <char,string> mapleft; unordered_map <string,char> mapright; vector <string> vec; int i = 0; int j = 0; //将字符串按照空格分割放入容器vec中 for(;i<str.size();i++) { if(' '==str[i]) { string tempstr = str.substr(j,i-j); vec.push_back(tempstr); j = i +1; } if(i == str.size() - 1) { string endstr = str.substr(j,i-j+1); vec.push_back(endstr); } } if(pattern.size()!=vec.size()) return false; //建立两者之间的正序和反序的map映射 for(i = 0;i <pattern.size();i++) { //若原map中没有则加入 if(mapleft.find(pattern[i]) == mapleft.end()&&mapright.find(vec[i]) == mapright.end()) { mapleft.insert(make_pair(pattern[i],vec[i])); mapright.insert(make_pair(vec[i],pattern[i])); } //查找map看是否一一相对应 else if(mapleft[pattern[i]]!=vec[i] || mapright[vec[i]]!=pattern[i]) { return false; }; } return true; } };