使用unordered_map,时间复杂度O(n):
class Solution { public: bool wordPattern(string pattern, string str) { const int len1 = pattern.length(); const int len2 = str.length(); if(len1 == 0 && len2 == 0) return true; if(len1 == 0 || len2 == 0) return false; unordered_map<char, string> umap1; unordered_map<string, char> umap2; int j = -1, i = 0; for(i=0; i<len1; ++i){ int c = j + 1; while(str[++j] != ' ' && str[j] != '\0'); string tmp(str, c, j-c); auto it1 = umap1.insert(make_pair(pattern[i], tmp)); auto it2 = umap2.insert(make_pair(tmp, pattern[i])); if(!it1.second || !it2.second){ if(it1.first->second != tmp || it2.first->second != pattern[i]) return false; } if(str[j] == '\0') //注意为'\0'的情况 break; } return j == str.length() && i == pattern.length()-1; //注意两个匹配长度不能的情况 } };