Skip to content
On this page

290. 单词规律

原题链接:LeetCode 290. 单词规律

题目描述

给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。

这里的 **遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s **中的每个非空单词之间存在着双向连接的对应规律。具体来说:

- `pattern` 中的每个字母都 **恰好** 映射到 `s` 中的一个唯一单词。

- `s` 中的每个唯一单词都 **恰好** 映射到 `pattern` 中的一个字母。

- 没有两个字母映射到同一个单词,也没有两个单词映射到同一个字母。

示例1:

"abba"

示例 2:

"abba"

示例 3:

"aaaa"

提示:

- `1 <= pattern.length <= 300`

- `pattern` 只包含小写英文字母

- `1 <= s.length <= 3000`

- `s` 只包含小写英文字母和 `' '`

- `s` **不包含** 任何前导或尾随对空格

- `s` 中每个单词都被 **单个空格 **分隔

难度: Easy


题解代码

javascript
/**
 * @param {string} pattern
 * @param {string} str
 * @return {boolean}
 */
var wordPattern = function(pattern, str) {
  // hash 解决这个问题
  let letters = pattern.split('')
  let words = str.split(' ')
  //长度不等
  if (letters.length !== words.length) return false
  let map = {}
  let arr = []
  // 构建hash
  for(let i = 0, len = letters.length; i < len; i++) {
    if (letters[i] in map) {
      if (map[letters[i]] !== words[i]) return false
    } else  {
      if (arr.indexOf(words[i]) !== -1) return false
      map[letters[i]] = words[i]
      arr.push(words[i])
    }
  }
  return true
};
// wordPattern("abab", "dog dog dog dog")

技术文档集合