题目描述:
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
.
Example 1:
Input: pattern = "abba", str = "dog cat cat dog"
Output: true
Example 2:
Input:pattern = "abba", str = "dog cat cat fish"
Output: false
Example 3:
Input: pattern = "aaaa", str = "dog cat cat dog"
Output: false
Example 4:
Input: pattern = "abba", str = "dog dog dog dog"
Output: 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) {
vector<string> v=split(str);
unordered_map<string,int> hash1;
unordered_map<char,int> hash2;
if(pattern.size()!=v.size()) return false;
for(int i=0;i<v.size();i++)
{
if(hash1.count(v[i])!=hash2.count(pattern[i])) return false;
else if(hash1.count(v[i])>0&&hash1[v[i]]!=hash2[pattern[i]]) return false;
hash1[v[i]]=i;
hash2[pattern[i]]=i;
}
return true;
}
vector<string> split(string s)
{
vector<string> result;
int i=0;
int j=0;
while(j<s.size())
{
if(s[j]==' ')
{
result.push_back(s.substr(i,j-i));
j++;
i=j;
}
else if(j==s.size()-1)
{
result.push_back(s.substr(i,j-i+1));
break;
}
else j++;
}
return result;
}
};