单词规律
Category | Difficulty | Likes | Dislikes |
---|---|---|---|
algorithms | Easy (39.79%) | 92 | - |
Tags
Companies
这里的 遵循 指完全匹配,例如, 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
包含了由单个空格分隔的小写字母。
1
/*
* @lc app=leetcode.cn id=290 lang=javascript
*
* [290] 单词规律
*/
/**
* @param {string} pattern
* @param {string} str
* @return {boolean}
*/
var wordPattern = function (pattern, str) {
const strArr = str.split(' ')
let map = new Map()
let set = new Set()
if (pattern.length !== strArr.length) return false
for (let i = 0; i < pattern.length; i++) {
if (!map.has(pattern[i])) {
if (set.has(strArr[i])) return false
map.set(pattern[i], strArr[i])
set.add(strArr[i])
}
else if (map.get(pattern[i]) !== strArr[i]) return false
}
return true
};
这道题还是比较容易想到的
难的是很容易忘记考虑两种情况
wordPattern('aaa', 'dog dog dog dog')
长度不匹配的时候,我们就直接返回false
即可
if (strArr.length !== pattern.length) return false
wordPattern('abba', 'dog dog dog dog')
key-value
中是不允许key
不同而value
相同的
所以我们使用一个set
来缓存我们在map
里添加过的value
当我们在添加时,我们就要先判断一下这个value
是不是已经添加过的
如果是 就直接返回false
if (!map.has(pattern[i])) {
if (set.has(strArr[i])) return false
map.set(pattern[i], strArr[i])
set.add(strArr[i])
}