0422. 有效的单词方块
大约 2 分钟
--- 

0422. 有效的单词方块
- 标签:数组、矩阵
- 难度:简单
题目链接
题目大意
描述:
给定一个单词序列 ,判断它是否构成一个有效的单词方块。
有效的单词方块需要满足:第 行第 列的字符等于第 行第 列的字符,即 。
要求:
如果是有效的单词方块,返回 ;否则返回 。
说明:
- 。
- 。
- 仅由小写英文字母组成。
示例:
- 示例 1:

输入: words = ["abcd","bnrt","crmy","dtye"]
输出: true
解释:
第 1 行和第 1 列都读作 "abcd"。
第 2 行和第 2 列都读作 "bnrt"。
第 3 行和第 3 列都读作 "crmy"。
第 4 行和第 4 列都读作 "dtye"。
因此,它构成了一个有效的单词方块。- 示例 2:

输入: words = ["abcd","bnrt","crm","dt"]
输出: true
解释:
第 1 行和第 1 列都读作 "abcd"。
第 2 行和第 2 列都读作 "bnrt"。
第 3 行和第 3 列都读作 "crm"。
第 4 行和第 4 列都读作 "dt"。
因此,它构成了一个有效的单词方块。解题思路
思路 1:矩阵转置验证
有效的单词方块需要满足:第 行的第 个字符等于第 行的第 个字符,即 。
解题步骤:
- 遍历每一行 和每一列 。
- 检查 是否等于 。
- 需要注意边界情况:
- 行的长度可能不同。
- 访问 时,需要确保 且 。
- 访问 时,需要确保 且 。
关键点:
- 如果 的长度大于 的行数,说明存在列索引超出行数,不是有效的单词方块。
- 对称性检查: 必须等于 。
思路 1:代码
class Solution:
def validWordSquare(self, words: List[str]) -> bool:
n = len(words)
for i in range(n):
for j in range(len(words[i])):
# 检查对称位置是否存在且相等
# words[i][j] 应该等于 words[j][i]
# 如果 j >= n,说明列索引超出行数
if j >= n:
return False
# 如果 words[j] 的长度不够,或者字符不匹配
if i >= len(words[j]) or words[i][j] != words[j][i]:
return False
return True思路 1:复杂度分析
- 时间复杂度:,其中 是行数, 是平均每行的字符数。
- 空间复杂度:,只使用了常数额外空间。