Appearance
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")