题目描述:
给定一种 pattern(模式)
和一个字符串 str
,判断 str
是否遵循相同的模式。
这里的遵循指完全匹配,例如, pattern
里的每个字母和字符串 str
中的每个非空单词之间存在着双向连接的对应模式。
示例1:
输入: pattern = "abba", str = "dog cat cat dog"
输出: true
示例 2:
输入: pattern = "abba", str = "dog cat cat fish"
输出: false
示例 3:
输入: pattern = "aaaa", str = "dog cat cat dog"
输出: false
示例 4:
输入: pattern = "abba", str = "dog dog dog dog"
输出: false
说明:
你可以假设 pattern
只包含小写字母, str
包含了由单个空格分隔的小写字母。
算法:
class Solution {
public:
bool wordPattern(string pattern, string str) {
unordered_map<char, string> mp1;
unordered_map<string, char> mp2;
vector<string> words;
int len = str.size();
int i=0, j=0;
while(i<len){
while(j<len && str[j] != ' '){
j++;
}
if(i != j){
words.push_back(str.substr(i, j-i));
}
j++;
i = j;
}
int sz = pattern.size();
if(sz != words.size()){
return false;
}else{
for(int i = 0; i < sz; i++){
char ch = pattern[i];
string wd = words[i];
if(mp1.find(ch) == mp1.end() && mp2.find(wd) == mp2.end()){
mp1[ch] = wd;
mp2[wd] = ch;
}else if(mp1.find(ch) != mp1.end() && mp2.find(wd) != mp2.end()){
if(mp1[ch] != wd || mp2[wd] != ch){
return false;
}
}else{
return false;
}
}
return true;
}
}
};