Given a sequence of words, check whether it forms a valid word square.
A sequence of words forms a valid word square if the kth row and column read the exact same string, where 0 ≤k < max(numRows, numColumns).
Note:
- 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
.
Example 1:
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.
Example 2:
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.
Example 3:
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.
這道題給了我們一個二位數組,每行每列都是一個單詞,需要滿足第k行的單詞和第k列的單詞要相等,這里不要求每一個單詞的長度都一樣,只要對應位置的單詞一樣即可。那么這里實際上也就是一個遍歷二維數組,然后驗證對應位上的字符是否相等的問題,由於各行的單詞長度不一定相等,所以我們在找對應位置的字符時,要先判斷是否越界,即對應位置是否有字符存在,遇到不符合要求的地方直接返回false,全部遍歷結束后返回true,參見代碼如下:
class Solution { public: bool validWordSquare(vector<string>& words) { if (words.empty()) return true; if (words.size() != words[0].size()) return false; for (int i = 0; i < words.size(); ++i) { for (int j = 0; j < words[i].size(); ++j) { if (j >= words.size() || i >= words[j].size() || words[i][j] != words[j][i]) { return false; } } } return true; } };
參考資料:
https://discuss.leetcode.com/topic/63387/java-ac-solution-easy-to-understand