千锋教育web前端高频面试题视频教程,kerwin大话前端面试秘籍(附答案)

单词和模式的匹配
这个函数首先将输入的字符串分割成单词数组。然后,它检查模式和单词数组的长度是否相等。如果长度不等,那么就返回 false,因为模式和字符串无法匹配。
接下来,函数遍历模式和单词数组。对于每个模式和单词,它首先检查模式是否已经映射到一个单词。如果没有,那么它检查单词是否已经映射到一个模式。如果单词已经映射到一个模式,那么就返回false,因为一个单词不能映射到两个不同的模式。如果模式和单词都没有映射,那么就将模式映射到单词,将单词映射到模式。
如果模式已经映射到一个单词,那么就检查这个单词是否和当前的单词相等。如果不相等那么就返回 false,因为一个模式不能映射到两个不同的单词。
如果函数能够遍历完所有的模式和单词,那么就返回true,表示模式和字符串匹配。
function wordPattern(pattern, str) {
let patternToWord = {};
let wordToPattern = {};
let words = str.split(' ');
if (pattern.length !== words.length) {
return false;
}
for (let i = 0; i < pattern.length; i++) {
let p = pattern[i];
let w = words[i];
if (!patternToWord[p]) {
if (wordToPattern[w]) {
return false;
}
patternToWord[p] = w;
wordToPattern[w] = p;
} else if (patternToWord[p] !== w) {
return false;
}
}
return true;
}
console.log(wordPattern("abba", "北京 杭州 杭州 北京")); // true
console.log(wordPattern("aabb", "北京 杭州 杭州 北京")); // false
console.log(wordPattern("baab", "北京 杭州 杭州 北京")); // true