单词规律
Tips
题目
给定一种规律 pattern
和一个字符串 s
, 判断 s
是否遵循相同的规律.
这里的遵循指完全匹配, 例如, pattern
里的每个字母和字符串 s
中的每个非空单词之间存在着双向连接的对应规律.
提示:
1 <= pattern.length <= 300
pattern
只包含小写英文字母1 <= s.length <= 3000
s
只包含小写英文字母和' '
s
不包含任何前导或尾随对空格s
中每个单词都被单个空格分隔
示例
输入: pattern = "abba", s = "dog cat cat dog"
输出: true
输入:pattern = "abba", s = "dog cat cat fish"
输出: false
输入: pattern = "aaaa", s = "dog cat cat dog"
输出: false
题解
warning
这道题跟 205. 同构字符串 思路一模一样, 但你不能用对象来模拟哈希表. 因为测试用例中有个单词是 constructor
,
把该单词当做对象的 key 会覆盖原生 constructor
. 所以本题老老实实用 Map.
/**
* @param {string} pattern
* @param {string} str
* @return {boolean}
*/
var wordPattern = function (pattern, str) {
const words = s.split(' ')
if (pattern.length !== words.length) return false
const patternMap = new Map()
const wordMap = new Map()
for (let i = 0; i < pattern.length; i++) {
const p = pattern[i]
const word = words[i]
if (patternMap.has(p) && patternMap.get(p) !== word) return false
if (wordMap.has(word) && wordMap.get(word) !== p) return false
patternMap.set(p, word)
wordMap.set(word, p)
}
return true
}