列表

详情


422. 有效的单词方块

给你一个单词序列,判断其是否形成了一个有效的单词方块。

有效的单词方块是指此由单词序列组成的文字方块的 第 k 行 和 第 k 列 (0 ≤ k < max(行数, 列数)) 所显示的字符串完全相同。

注意:

  1. 给定的单词数大于等于 1 且不超过 500。
  2. 单词长度大于等于 1 且不超过 500。
  3. 每个单词只包含小写英文字母 a-z

 

示例 1:

输入:
[
  "abcd",
  "bnrt",
  "crmy",
  "dtye"
]

输出:
true

解释:
第 1 行和第 1 列都是 "abcd"。
第 2 行和第 2 列都是 "bnrt"。
第 3 行和第 3 列都是 "crmy"。
第 4 行和第 4 列都是 "dtye"。

因此,这是一个有效的单词方块。

 

示例 2:

输入:
[
  "abcd",
  "bnrt",
  "crm",
  "dt"
]

输出:
true

解释:
第 1 行和第 1 列都是 "abcd"。
第 2 行和第 2 列都是 "bnrt"。
第 3 行和第 3 列都是 "crm"。
第 4 行和第 4 列都是 "dt"。

因此,这是一个有效的单词方块。

 

示例 3:

输入:
[
  "ball",
  "area",
  "read",
  "lady"
]

输出:
false

解释:
第 3 行是 "read" ,然而第 3 列是 "lead"。

因此,这 不是 一个有效的单词方块。

 

相似题目

单词方块

托普利茨矩阵

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: bool validWordSquare(vector<string>& words) { } };

golang 解法, 执行用时: 0 ms, 内存消耗: 3 MB, 提交时间: 2023-10-15 18:06:42

func validWordSquare(words []string) bool {
    n:=len(words)
    pl:=n
    for i:=0;i<n;i++{
        s:=words[i]
        if len(s)>pl {
            return false
        }
        if len(s)<len(words) && len(words[len(s)])>i{
            return false
        }
        for j:=0;j<len(s);j++{
            if len(words[j])<=i|| s[j]!=words[j][i]{
                return false
            }
        }
        pl=len(s)
    }
    return true
}

func validWordSquare2(words []string) bool {
    for i, word := range words {
        var j int
        for _, w := range words {
            if i < len(w) {
                if j >= len(word) {
                    return false
                }

                // 内容是否相等
                if word[j] != w[i] {
                    return false
                }
                j++
            }
        }

        // 长度是否相等
        if j != len(word) {
            return false
        }
    }


    return true
}

python3 解法, 执行用时: 40 ms, 内存消耗: 17.2 MB, 提交时间: 2023-10-15 18:06:03

class Solution:
    def validWordSquare(self, words: List[str]) -> bool:
        max_len = max(len(word) for word in words)
        words = [word + (max_len - len(word))* "#" for word in words]
        tempt = zip(*words)
        words_ = ["".join(item) for item in tempt]
        return words_ == words

上一题