千鋒教育web前端高頻面試題視頻教程,kerwin大話前端面試秘籍(附答案)

單詞和模式的匹配
這個函數(shù)首先將輸入的字符串分割成單詞數(shù)組。然后,它檢查模式和單詞數(shù)組的長度是否相等。如果長度不等,那么就返回 false,因為模式和字符串無法匹配。
接下來,函數(shù)遍歷模式和單詞數(shù)組。對于每個模式和單詞,它首先檢查模式是否已經(jīng)映射到一個單詞。如果沒有,那么它檢查單詞是否已經(jīng)映射到一個模式。如果單詞已經(jīng)映射到一個模式,那么就返回false,因為一個單詞不能映射到兩個不同的模式。如果模式和單詞都沒有映射,那么就將模式映射到單詞,將單詞映射到模式。
如果模式已經(jīng)映射到一個單詞,那么就檢查這個單詞是否和當前的單詞相等。如果不相等那么就返回 false,因為一個模式不能映射到兩個不同的單詞。
如果函數(shù)能夠遍歷完所有的模式和單詞,那么就返回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