290.Word Pattern
作者:互联网
给定一个模板,和一个字符串,判断字符串中的单词是否如模板那样排列。
Input: pattern = "abba", str = "dog cat cat dog"
Output: true
难点:这是双射的,需要考虑 pattern -> str;也需要考虑 str -> pattern 。这样才是 一 一映射的。然后需要对字符串切割,不像 python有split函数可以切割,C++需要自己动手切割。还好题目给的都是标准的,单词间只有一个空格,不用考虑多空格的情况。
思路:运用2个哈希字典,分别保存2个映射关系,只有2个映射都满足时,才返回true,否则返回false。
bool wordPattern(string pattern, string str) { vector<string> strSplit; int j = 0; for (int i = 0; i < (int)str.length(); i++) { //对字符串str按空格切割 if (str[i] == ' ' && str[j] != ' ') { strSplit.push_back(str.substr(j, i - j)); j = i + 1; } } strSplit.push_back(str.substr(j, str.length() - j)); if ((int)pattern.length() != (int)strSplit.size()) return false; //判断长度是否一样 unordered_map <char, string> mapCharToString; // pattern -> str unordered_map<string, char> mapStringToChar; //str-> pattern for (int i = 0; i < (int)pattern.length(); i++) { if (mapCharToString.count(pattern[i])) { if (mapCharToString[pattern[i]] != strSplit[i]) return false; } else mapCharToString[pattern[i]] = strSplit[i]; if (mapStringToChar.count(strSplit[i])) { if (mapStringToChar[strSplit[i]] != pattern[i]) return false; } else mapStringToChar[strSplit[i]] = pattern[i]; } return true; }
标签:Word,int,Pattern,mapStringToChar,str,strSplit,pattern,false,290 来源: https://www.cnblogs.com/luo-c/p/12889695.html