其他分享
首页 > 其他分享> > 290.Word Pattern

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