力扣面试150(33/150)

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)确保字符与单词一一对应,并先检查长度是否匹配,再分两次遍历验证映射一致性,最终返回是否严格遵循模式。