1. 离散数学中双射的概念(映射+单射+满射)
  2. C++中的stringstream
  3. C++中的正则表达式也可以用来提取单词
class Solution {
public:
    bool wordPattern(string pattern, string s) {

        vector<string> words;
        stringstream ss(s);
        string word;
        while(ss >> word) words.push_back(word);

        if(words.size() != pattern.size()) return false;

        unordered_map<char, string> pattern_to_words;
        unordered_map<string, char> words_to_pattern;

        for(int i = 0; i < pattern.size(); i++) {
            if(pattern_to_words.count(pattern[i]) && pattern_to_words[pattern[i]] != words[i]) return false;
            pattern_to_words[pattern[i]] = words[i];

            if(words_to_pattern.count(words[i]) && words_to_pattern[words[i]] != pattern[i]) return false;
            words_to_pattern[words[i]] = pattern[i];
        }

        return true;
    }
};