LintCode 888: Valid Word Square

本文探讨了如何检查一组字符串是否构成有效的单词方阵。单词方阵的有效性在于其每一行和每一列读起来是否完全相同。文章通过具体示例说明了判断标准,并提供了一种直接比较的方法来实现这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. Valid Word Square
    中文English
    Given a sequence of words, check whether it forms a valid word square.

A sequence of words forms a valid word square if the k^th row and column read the exact same string, where 0 ≤ k < max(numRows, numColumns).

Example
Example1

Input:
[
“abcd”,
“bnrt”,
“crmy”,
“dtye”
]
Output: true
Explanation:
The first row and first column both read “abcd”.
The second row and second column both read “bnrt”.
The third row and third column both read “crmy”.
The fourth row and fourth column both read “dtye”.

Therefore, it is a valid word square.
Example2

Input:
[
“abcd”,
“bnrt”,
“crm”,
“dt”
]
Output: true
Explanation:
The first row and first column both read “abcd”.
The second row and second column both read “bnrt”.
The third row and third column both read “crm”.
The fourth row and fourth column both read “dt”.

Therefore, it is a valid word square.
Example3

Input:
[
“ball”,
“area”,
“read”,
“lady”
]
Output: false
Explanation:
The third row reads “read” while the third column reads “lead”.

Therefore, it is NOT a valid word square.
Notice
The number of words given is at least 1 and does not exceed 500.
Word length will be at least 1 and does not exceed 500.
Each word contains only lowercase English alphabet a-z.

解法1:直接比较。
代码如下:

class Solution {
public:
    /**
     * @param words: a list of string
     * @return: a boolean
     */
    bool validWordSquare(vector<string> &words) {
        int m = words.size();
        if (m == 0) return true;
        
        int n = 0;
        for (int i = 0; i < m; ++i) {
            n = max(n, (int)words[i].size());
        }
        
        int i = 0, j = 0;
        
        for (i = 0; i < n; ++i) {
            string columString;
            for (j = 0; j < m; ++j) {
                if (words[j].size() >= i) columString += words[j][i];
            }
            if (columString != words[i]) return false;  
        }
        
        return true;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值