题目描述补充
题目:单词规律
给定一个字符串数组 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 示例代码
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 示例代码
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 示例代码
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