【leetcode】290. Word Pattern

来源:互联网 发布:软件质量管理制度 编辑:程序博客网 时间:2024/06/09 17:19

使用两个map,来分别存放一一对应。细节方面就是对于字符的切割,以及如何查询map的键值是否存在。

class Solution {public:    bool wordPattern(string pattern, string str) {        if(str.size() == 0 && pattern.size() == 0) return true;        vector<string> vec;        preprocess(str, vec);        if(vec.size() != pattern.size()) return false;                unordered_map<char, string> csmap;        unordered_map<string, char> scmap;        for(int i = 0; i < pattern.size(); ++ i) {            string word = csmap[pattern[i]];            if(word.size() == 0) {                csmap[pattern[i]] = vec[i];                if(scmap[vec[i]]) return false;                scmap[vec[i]] = pattern[i];            }            else {                if(word != vec[i]) return false;            }        }        return true;    }    private:    void preprocess(string str, vector<string>& vec) {        if(str.size() == 0) return;        int i = 0;        for(; i < str.size(); ++ i) {            if(str[i] == ' ') break;        }        if(i == str.size())  vec.push_back(str);        else {            vec.push_back(str.substr(0, i));            preprocess(str.substr(i+1), vec);        }    }};


class Solution {public:    bool wordPattern(string pattern, string str) {if(pattern.empty() && str.empty()) return true;if(pattern.empty() || str.empty()) return false;vector<string> word;process(str, word);if(word.size() != pattern.size()) return false;        unordered_map<char, string> cTos;unordered_map<string, char> sToc;for(int i = 0; i < pattern.size(); ++ i) {if(cTos.find(pattern[i]) == cTos.end() && sToc.find(word[i]) == sToc.end()) {cTos[pattern[i]] = word[i];sToc[word[i]] = pattern[i];}else if(cTos.find(pattern[i]) == cTos.end() || sToc.find(word[i]) == sToc.end()) return false;else {if(cTos[pattern[i]] != word[i]) return false;if(sToc[word[i]] != pattern[i]) return false;}}return true;}private:void process(string& s, vector<string>& word) {while(!s.empty()) {int pos = s.find(' ');if(pos == -1) {word.push_back(s);s.clear();}else {word.push_back(s.substr(0, pos));s = s.substr(pos + 1);}}}};



1 0
原创粉丝点击