给定一种规律 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
包含了由单个空格分隔的小写字母。
思路:和205. 同构字符串思路一样,建立两个map,一个存pattern中的每个字符,一个存str中的每个单词。
pattern中的每个字符和str中的每个单词,分别对应到一个共同的数字上,看看是否能一一对应上。
不过pattern中的字符数和str中的字符串数个数可能不一样,要格外判断一下。
class Solution {
public:
bool wordPattern(string pattern, string str) {
map<char, int> m1;
map<string, int> m2;
stringstream ss(str);
string temp;
for(int i=0; i<pattern.size(); ++i){
ss>>temp;
if(m1[pattern[i]]!=m2[temp])
return false;
m1[pattern[i]]=m2[temp]=i+1;
}
return !(ss>>temp);
}
};