290. Word Pattern

来源:互联网 发布:中国农大网络远程教育 编辑:程序博客网 时间:2024/05/19 02:41

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;    }};

0 0
原创粉丝点击