7.18 290. 单词规律
给定一种规律 pattern
和一个字符串 s
,判断 s
是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern
里的每个字母和字符串 s
中的每个非空单词之间存在着双向连接的对应规律。
我的思路:
与上一道题目大差不差叭,但是有一些差别:
s现在是一个个单词,要把单词转化为单词数组,这样便于进行比较
s和p的长度不一样,需要对长度进行考虑
我的代码:
var wordPattern = function(pattern, s) {
let pMap = new Map();
let sMap = new Map();
let newS = s.split(' ');
console.log(newS);
// 先遍历p->s
let plen = pattern.length;
let sLen = newS.length ;
let len = plen > sLen ? plen : sLen;
if(plen !== sLen){
return false;
}
for(let i = 0 ; i < len ; i++){
if(pMap.has(pattern[i])){
if(pMap.get(pattern[i]) !== newS[i]){
console.log(pMap);
return false;
}
}else {
pMap.set(pattern[i] , newS[i]);
}
}
// s->p
for(let i = 0 ; i < len ; i++){
if(sMap.has(newS[i])){
if(sMap.get(newS[i]) !== pattern[i]){
return false;
}
}else {
sMap.set(newS[i] , pattern[i]);
}
}
return true;
};
// 和上一题差不多?
// 双向映射:p->s s->p
总结:通过双向映射(pattern→s 和 s→pattern)确保字符与单词一一对应,并先检查长度是否匹配,再分两次遍历验证映射一致性,最终返回是否严格遵循模式。