查找和替换模式
你有一个单词列表 words 和一个模式 pattern,你想知道 words 中的哪些单词与模式匹配。 如果存在字母的排列 p ,使得将模式中的每个字母 x 替换为 p(x) 之后,我们就得到了所需的单词,那么单词与模式是匹配的。 (回想一下,字母的排列是从字母到字母的双射:每个字母映射到另一个字母,没有两个字母映射到同一个字母。) 返回 words 中与给定模式匹配的单词列表。 你可以按任何顺序返回答案。
输入:words = [“abc”,”deq”,”mee”,”aqq”,”dkd”,”ccc”], pattern = “abb”
输出:[“mee”,”aqq”]
解释: “mee” 与模式匹配,因为存在排列 {a -> m, b -> e, …}。 “ccc” 与模式不匹配,因为 {a -> c, b -> c, …} 不是排列。 因为 a 和 b 映射到同一个字母。-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 var findAndReplacePattern = function (words, pattern ) { let check=function (word,pattern_inner ) { let map = {} for (let p of pattern){ map[p]=undefined } let mapped_arr = [] for (let i = 0 ;i<pattern_inner.length; i++){ let key = pattern_inner[i] let val = word[i] if (map[key] === undefined ){ map[key] = val if (mapped_arr.indexOf(val)!==-1 ){ return false } mapped_arr.push(val) }else { if (map[key]!==val){ return false } } } return true } let arr = [] for (let word of words){ if (check(word,pattern)){ arr.push(word) } } return arr };