290. 单词规律
描述
给定一种规律 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
思路
- 使用 HashMap 来解决。
- 将 str 拆分成数组。
- 创建MapP 和 MapS;字符/单词 为 key,索引为 Value。
- 遍历 s 和 t,逐个比较每个字符出现的位置(索引记录),相同即继续循环,否则返回 false。
代码
let wordPattern = function(pattern, str) {
str = str.split(' ')
if(str.length !== pattern.length){
return false
}
let MapP = new Map(), MapS = new Map()
for (let i = 0; i < str.length; i++) {
if(MapP.get(pattern[i]) === undefined){
MapP.set(pattern[i],i)
}
if(MapS.get(str[i]) === undefined){
MapS.set(str[i],i)
}
if(MapP.get(pattern[i]) !== MapS.get(str[i])){
return false
}
}
return true
};
总结
- 与 205. 同构字符串 及其相似,只不过将其中一个字符串变成了字符串数组的形式。【205. 同构字符串】解法