欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > LeetCode题解:290. 单词规律,哈希表,JavaScript,详细注释

LeetCode题解:290. 单词规律,哈希表,JavaScript,详细注释

2026/5/24 6:37:46 来源:https://blog.csdn.net/chencl1986/article/details/140653088  浏览:    关键词:LeetCode题解:290. 单词规律,哈希表,JavaScript,详细注释

原题链接:
https://leetcode.cn/problems/word-pattern/description/

理解题意:

  1. pattern = "abba", s = "dog cat cat cat"pattern中的a同时映射了s中的dogcat,不正确
  2. pattern = "abba", s = "dog dog dog dog"s中的dog同时映射了pattern中的ab,不正确
  3. pattern = "abba", s = "dog constructor constructor dog",如果let s2p = {}; console.log(typeof s2p.consructor) // functionconsructor无法被映射到“b”,会导致判断出错,因此只能用let s2p = new Map()存储映射关系

解题思路:

  1. 做这题之前,可以先做205. 同构字符串
  2. 用两个Map,分别存储pattern -> ss -> pattern的映射关系
  3. 遍历字符串,查看Map中存储的映射关系是否与遍历到的字符不同,出现不同就表示两个字符串不存在双向连接规律
  4. 如果正常退出循环,表示没意义找到不同的映射关系,两个字符串存在双向连接规律
/*** @param {string} pattern* @param {string} s* @return {boolean}*/
var wordPattern = function(pattern, s) {// 将s按空格切割成数组const arr = s.split(' ')// 如果pattern和arr的长度不一致,一定没有相同的规律if (pattern.length !== arr.length) {return false}// 使用Map存储字符串的映射规律// 之所以不用对象,是因为有一个case的s中有constructor// 会导致无法映射字符串,而是会映射到constructor函数let p2s = new Map()let s2p = new Map()// 逐个字符对比映射关系for (let i = 0; i < pattern.length; i++) {// 如果映射关系存在,且与已存储的映射关系不同,表示不存在规律if (p2s.has(pattern[i]) && (p2s.get(pattern[i]) !== arr[i]) ||s2p.has(arr[i]) && (s2p.get(arr[i]) !== pattern[i])) {return false}// 每次循环都缓存当前映射关系p2s.set(pattern[i], arr[i])s2p.set(arr[i], pattern[i])}// 如果正常退出循环,表示遵循规律return true
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词