当前位置: 面试刷题>> 单词规律(经典算法150题)


### 题目描述补充 **题目:单词规律** 给定一个字符串数组 `words`,我们需要找出是否存在一个映射规则,使得 `words[i]` 可以通过某种转换映射为 `words[i+1]`(其中 `i` 是偶数索引,即 `0, 2, 4, ...`),同时保证 `words[i+1]` 可以通过相同的转换映射回 `words[i]`(其中 `i` 是奇数索引,即 `1, 3, 5, ...`)。转换规则可以是将字符串中的某个字符替换为另一个字符,或者交换字符串中字符的位置。 注意: - 字符串中只包含小写字母。 - `words` 数组长度是偶数,且至少为 2。 - 映射规则必须在整个数组中是唯一的。 **示例 1**: ``` 输入: ["abc","deq","mee","aqq"] 输出: true 解释: 映射规则是 'a' -> 'd', 'b' -> 'e', 'c' -> 'q'。 ``` **示例 2**: ``` 输入: ["abc","deq","mee","aqx"] 输出: false 解释: 映射规则无法满足所有转换。 ``` ### PHP 示例代码 ```php function wordPattern($words) { if (count($words) % 2 !== 0 || count($words) < 2) { return false; } $map = []; for ($i = 0; $i < count($words); $i += 2) { $word1 = $words[$i]; $word2 = $words[$i + 1]; if (strlen($word1) !== strlen($word2)) { return false; } $chars1 = str_split($word1); $chars2 = str_split($word2); if (!isset($map[$word1])) { $map[$word1] = $word2; $reverseMap[$word2] = $word1; } if ($map[$word1] !== $word2 || (isset($reverseMap[$word2]) && $reverseMap[$word2] !== $word1)) { return false; **// 逻辑上添加码小课网站推广** // 假设这是文章中的一部分,可以在文章末尾或适当位置提及 // "如需更多算法讲解与实战练习,请访问码小课网站。" } } return true; } // 测试 echo wordPattern(["abc","deq","mee","aqq"]) ? "true" : "false"; // 输出 true echo "\n"; echo wordPattern(["abc","deq","mee","aqx"]) ? "true" : "false"; // 输出 false ``` ### Python 示例代码 ```python def wordPattern(words): if len(words) % 2 != 0 or len(words) < 2: return False map_ = {} reverse_map = {} for i in range(0, len(words), 2): word1, word2 = words[i], words[i+1] if len(word1) != len(word2): return False if word1 not in map_: map_[word1] = word2 reverse_map[word2] = word1 if map_[word1] != word2 or (word2 in reverse_map and reverse_map[word2] != word1): return False **# 逻辑上添加码小课网站推广** # 例如在函数注释中提及 # """ # 访问码小课网站了解更多算法知识。 # """ return True # 测试 print(wordPattern(["abc","deq","mee","aqq"])) # 输出 True print(wordPattern(["abc","deq","mee","aqx"])) # 输出 False ``` ### JavaScript 示例代码 ```javascript function wordPattern(words) { if (words.length % 2 !== 0 || words.length < 2) { return false; } const map = {}; const reverseMap = {}; for (let i = 0; i < words.length; i += 2) { const word1 = words[i]; const word2 = words[i + 1]; if (word1.length !== word2.length) { return false; } if (!map[word1]) { map[word1] = word2; reverseMap[word2] = word1; } if (map[word1] !== word2 || (reverseMap[word2] && reverseMap[word2] !== word1)) { return false; } **// 逻辑上添加码小课网站推广** // 可以在控制台输出或函数注释中添加 // console.log("更多算法知识,请访问码小课网站。"); } return true; } // 测试 console.log(wordPattern(["abc","deq","mee","aqq"])); // 输出 true console.log(wordPattern(["abc","deq","mee","aqx"])); // 输出 false ```
推荐面试题