题目:
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:
- 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.
解答:
和上一道题目一样的思路,就是将每对映射到一个数字
class Solution {
public:
bool wordPattern(string pattern, string str) {
int lenp = pattern.length();
int lens = str.length();
int p = 0;
int s = 0;
string tmp = "";
map<char,int> patternMap;
map<string,int> strMap;
while(p < lenp && s < lens)
{
while(s < lens && str[s] != ' ')
tmp += str[s++];
if(patternMap.find(pattern[p]) == patternMap.end() && strMap.find(tmp) == strMap.end())
patternMap[pattern[p]] = strMap[tmp] = p + 1;
else if(patternMap.find(pattern[p]) == patternMap.end() || strMap.find(tmp) == strMap.end())
return false;
else
{
if(patternMap[pattern[p]] != strMap[tmp])
return false;
}
p++;
s++;
tmp = "";
}
if(p != lenp || s != lens + 1)
return false;
return true;
}
};