Skip to main content

单词规律

Tips

题目类型: HashMap

相关题目:

题目

给定一种规律 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
}