目录
1,题目--单词规律
给定一种规律 pattern
和一个字符串 s
,判断 s
是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern
里的每个字母和字符串 s
中的每个非空单词之间存在着双向连接的对应规律。
1.1类比题目--同构字符串
给定两个字符串 s
和 t
,判断它们是否是同构的。
如果 s
中的字符可以按某种映射关系替换得到 t
,那么这两个字符串是同构的。
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
详情见该笔记
力扣刷题Days6第二题(js)-CSDN博客
2,代码
/**
* @param {string} pattern
* @param {string} s
* @return {boolean}
*/
var wordPattern = function(pattern, s) {
const word2ch = new Map();
const ch2word = new Map();
const words = s.split(' ');
if(pattern.length != words.length){
return false;
}
for(const [i,word] of words.entries() ){
const ch = pattern[i]
if(word2ch.has(word) && word2ch.get(word)!=ch || ch2word.has(ch)&&ch2word.get(ch)!=word){
return false;
}
word2ch.set(word,ch);
ch2word.set(ch,word);
}
return true;
};
3,学习与总结
3.1 Map()基础知识
Map对象是键值对的集合,其中的键和值都可以是任意类型。
word2ch.has(word)
has(key) 检查word2ch中是否已经包含 word键,返回一个布尔值,用来表明
Map
对象中是否存在与指定的键key
关联的值;
const map1 = new Map();
map1.set('a', 1);
map1.set('b', 2);
map1.set('c', 3);
console.log(map1.get('a'));
// Expected output: 1
map1.set('a', 97);
console.log(map1.get('a'));
// Expected output: 97
- 存储数据到 Map 中的方式是使用
set(key, value)
方法;- get(key)返回与指定的键
key
关联的值,若不存在关联的值,则返回undefined;
for(const [i,word] of words.entries() ){
...
...
}
使用
for...of
循环和words.entries()
迭代words
数组。words.entries()
返回一个迭代器,它的每个元素都是一个包含数组索引和值的数组(在这里是单词)。
3.2题目分析
要建立pattern中单词和s中字符串的一一对应关系;
- 使用的数据对象是Map()对象,利用has(key) set(key,value) get(key)三个关键函数处理 判断逻辑;
- 对s字符串的处理:使用split()函数将s字符串转变为字符串数组,为之后的逻辑运算提供更好的数据结构类型;
勉励自己:贵在坚持!