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