LeetCode - Word Pattern

Question

Link : https://leetcode.com/problems/word-pattern/

Given a pattern and a string str, find if str follows the same pattern.

Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in str.

Examples:

pattern = “abba”, str = “dog cat cat dog” should return true.
pattern = “abba”, str = “dog cat cat fish” should return false.
pattern = “aaaa”, str = “dog cat cat dog” should return false.
pattern = “abba”, str = “dog dog dog dog” should return false.

Notes:
You may assume pattern contains only lowercase letters, and str contains lowercase letters separated by a single space.

Code

额,感觉是一个很常规的实现。(C++ : 0ms..这个可能是用例太少,通过用时比较少)

class Solution {
public:
    bool wordPattern(string pattern, string str) {
        string temp;
        vector<string> slist;
        stringstream ss(str);
        while(ss >> temp) slist.push_back(temp);
        if(slist.size() != pattern.size()) return false;

        map<char, string> stable;
        map<char, string>::iterator it;
        map<string, bool> wtable;
        map<string, bool>::iterator wit;
        for(int i = 0; i < pattern.size(); i++){
            it = stable.find(pattern[i]);
            if(it != stable.end()){
                if(slist[i].compare(it->second) != 0)
                    return false;
            }
            else{
                wit = wtable.find(slist[i]);
                if(wit != wtable.end()) 
                    return false;
                wtable.insert(pair<string, bool>(slist[i], true));
                stable.insert(pair<char, string>(pattern[i], slist[i]));
            }
        }
        return true;
    }
};
点赞