290. 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:

  1. pattern = "abba", str = "dog cat cat dog" should return true.
  2. pattern = "abba", str = "dog cat cat fish" should return false.
  3. pattern = "aaaa", str = "dog cat cat dog" should return false.
  4. 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.

答案:

class Solution {
public:
    bool wordPattern(string pattern, string str) {
        int nP=pattern.size(),nS=str.size();
        int i=0,j=0;
        map<char,string> mcs;
        map<string,char>msc;
        map<char,string>::iterator it;
        while(i<nS){
            string subS;
            while(i<nS&&str[i]!=' ')
            {
                subS.push_back(str[i]);
                i++;
            }
            it=mcs.find(pattern[j]);
            if(it==mcs.end()&&msc.find(subS)==msc.end())
            {
                mcs.insert(pair<char,string>(pattern[j],subS));
                msc.insert(pair<string,char>(subS,pattern[j]));
            }
            else if(it!=mcs.end()&&msc.find(subS)!=msc.end())
            {
                if(it->second!=subS||msc.find(subS)->second!=pattern[j])return false;
            }
            else return false;
            i++;
            j++;
        }
        return nP==j;
    }
};

你可能感兴趣的:(LeetCode,C++)