title

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

这里的「遵循」指完全匹配,例如 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 包含了由单个空格分隔的小写字母。    

解题

思路:

使用 patternMap 与 strArrMap 分别存储 pattern => strArrMapstrArrMap => pattern 的映射, 当存在一对多映射的情况时, 则它们非完全匹配, 否则是完全匹配的。

/**
* @param {string} pattern
* @param {string} str
* @return {boolean}
*/
var wordPattern = function(pattern, str) {
const strArr = str.split(' ')
if (pattern.length !== strArr.length) return false
const patternMap = new Map()
const strArrMap = new Map()
for (let i = 0; i < pattern.length; i++) {
const getPatternMap = patternMap.get(pattern[i])
const getStrArrMap = strArrMap.get(strArr[i])
if (!getPatternMap) {
patternMap.set(pattern[i], strArr[i])
} else if (getPatternMap !== strArr[i]) {
return false
}
if (!getStrArrMap) {
strArrMap.set(strArr[i], pattern[i])
} else if (getStrArrMap !== pattern[i]) {
return false
}
}
return true
};

相关题目

202、205、242、349、350、451