给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。
示例1:
输入: pattern = "abba", str = "dog cat cat dog"输出: true
示例 2:
输入:pattern = "abba", str = "dog cat cat fish"
输出: false
示例 3:
输入: pattern = "aaaa", str = "dog cat cat dog"
输出: false
示例 4:
输入: pattern = "abba", str = "dog dog dog dog"
输出: false
说明:
你可以假设 pattern 只包含小写字母, str 包含了由单个空格分隔的小写字母。
class Solution {
public:
    bool wordPattern(string pattern, string s) {
        vector<string> nodes = split(s);
        if(nodes.size() != pattern.size()){
            return false;
        }
        unordered_map<char, string> hashMap;
        unordered_map<string,char>  ivhashMap;
        for(int i = 0; i<pattern.size();i++){
            cout<<""<<nodes[i]<<endl;
            if(hashMap.count(pattern[i])){
                cout<<hashMap[pattern[i]]<<" "<<nodes[i]<<endl;
                if(hashMap[pattern[i]] != nodes[i]){
                    return false;
                }
            }else{
                if(ivhashMap.count(nodes[i])){
                    return false;
                }
                cout<<pattern[i]<<" "<<nodes[i]<<endl;
                hashMap[pattern[i]] = nodes[i];
                ivhashMap[nodes[i]] = pattern[i];
            }
        }
        return true;
    }
    vector<string> split(string s){
        vector<string> res;
        int left = 0;
        for(int i =0; i<s.size();i++){
            if(s[i] == ' ' ){
                res.push_back(s.substr(left, i - left));
                left = i+1;
            }          
        }
        res.push_back(s.substr(left, s.size() - left));
        return res;
    }
};
                    