有效的单词方块
难度:
标签:
题目描述
代码结果
运行时间: 28 ms, 内存: 17.0 MB
/*
* 思路:
* 使用Java Stream简化代码。
* 通过检查每一行和每一列的字符来验证方块是否有效。
*/
public boolean validWordSquare(List<String> words) {
return IntStream.range(0, words.size())
.allMatch(i -> IntStream.range(0, words.get(i).length())
.allMatch(j -> j < words.size() && i < words.get(j).length() && words.get(i).charAt(j) == words.get(j).charAt(i)));
}
解释
方法:
这个题解利用了 Python 的一些特性来简洁地解决问题。首先使用 zip 函数将 words 数组和它的转置(通过 zip(*words) 实现)配对。由于不同单词长度可能不同,使用 zip_longest 并填充空字符串来处理长度不一致的情况。最后用 all 函数检查每个单词是否与其对应的转置相等。
时间复杂度:
O(nm)
空间复杂度:
O(nm)
代码细节讲解
🦆
在使用`zip_longest`函数时,为什么选择用空字符串作为填充值,这对结果的正确性有什么影响?
▷🦆
如何处理和验证含有不同长度单词的列表?例如,当某些单词长度短于其他单词时,这种情况下算法的表现如何?
▷🦆
在比较过程中,如果单词数组`words`为空或只包含一个元素,这个算法是否还能正确运行?有没有必要对这些特殊情况进行处理?
▷🦆
在实际情况下,如果输入的单词中包含非ASCII字符,例如中文,这种算法处理上会有何不同?
▷相关问题
托普利茨矩阵
给你一个 m x n
的矩阵 matrix
。如果这个矩阵是托普利茨矩阵,返回 true
;否则,返回 false
。
如果矩阵上每一条由左上到右下的对角线上的元素都相同,那么这个矩阵是 托普利茨矩阵 。
示例 1:

输入:matrix = [[1,2,3,4],[5,1,2,3],[9,5,1,2]] 输出:true 解释: 在上述矩阵中, 其对角线为: "[9]", "[5, 5]", "[1, 1, 1]", "[2, 2, 2]", "[3, 3]", "[4]"。 各条对角线上的所有元素均相同, 因此答案是 True 。
示例 2:

输入:matrix = [[1,2],[2,2]] 输出:false 解释: 对角线 "[1, 2]" 上的元素不同。
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 20
0 <= matrix[i][j] <= 99
进阶:
- 如果矩阵存储在磁盘上,并且内存有限,以至于一次最多只能将矩阵的一行加载到内存中,该怎么办?
- 如果矩阵太大,以至于一次只能将不完整的一行加载到内存中,该怎么办?