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.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.
题意:pattern串和str串匹配,一个字符对应一个字符串。
要注意匹配的时候pattern串和str串唯一。
class Solution {
public:
bool wordPattern(string pattern, string str) {
str += ' ';
map<string,char> mm; mm.clear();
bool opt[30];
memset(opt,false,sizeof(opt));
string s = ""; int j = 0;
for(int i=0; str[i]; i++)
{
if(str[i]==' ')
{
if( j == pattern.length()) return false;
if(opt[pattern[j]-'a'])
{
if(mm[s] == pattern[j]) j++;
else return false;
}
else
{
if(mm[s]) return false;
else mm[s] = pattern[j],opt[pattern[j]-'a'] = true, j++;
}
s = "";
}
else s += str[i];
}
if( j != pattern.length()) return false;
return true;
}
};