leetcode 290. Word Pattern

普通的做法就是两个哈希。

这里用了一点小技巧,比如a和b双射,不相互保存,而是都保存一个数字,之后每次增加映射,数字都增加1。

节省空间用。

    bool wordPattern(string pattern, string str) {
        unordered_map<char, char> p;
        unordered_map<string, char> s;
        str = ' ' + str + ' ';
        
        char add = 0;
        string now = "";
        int index = 0;
        for (int i = 0; i < pattern.size(); i++) {
            index++;
            now.clear();
            while (index < str.size() && str[index] != ' ')
                now.push_back(str[index++]);
            if (now.empty() && i != pattern.size() - 1)
                return false;
            
            char temp = pattern[i];
            if (s[now] == 0 && p[temp] == 0) {
                s[now] = ++add;
                p[temp] = add;
            }
            else {
                if (s[now] != p[temp])
                    return false;
            }
        }
        if (index != str.size() - 1)
            return false;
        return true;
    }

 

posted on 2018-02-08 14:15  willaty  阅读(97)  评论(0编辑  收藏  举报

导航