Skip to content

Commit 8542eb4

Browse files
authored
feat: add solutions to lc problem: No.0422 (doocs#1534)
No.0422.Valid Word Square
1 parent 0d6d624 commit 8542eb4

File tree

7 files changed

+249
-0
lines changed

7 files changed

+249
-0
lines changed

solution/0400-0499/0422.Valid Word Square/README.md

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,22 +93,119 @@ false
9393

9494
<!-- 这里可写通用的实现逻辑 -->
9595

96+
**方法一:遍历检查**
97+
98+
我们观察发现,只要不满足 $words[i][j] = words[j][i]$,就可以直接返回 `false`
99+
100+
因此,我们只需要遍历每一行,然后检查每一行是否满足 $words[i][j] = words[j][i]$ 即可。注意,如果下标越界,也直接返回 `false`
101+
102+
时间复杂度 $O(n^2)$,其中 $n$ 是 $words$ 的长度。空间复杂度 $O(1)$。
103+
96104
<!-- tabs:start -->
97105

98106
### **Python3**
99107

100108
<!-- 这里可写当前语言的特殊实现逻辑 -->
101109

102110
```python
111+
class Solution:
112+
def validWordSquare(self, words: List[str]) -> bool:
113+
m = len(words)
114+
n = max(len(w) for w in words)
115+
if m != n:
116+
return False
117+
for j in range(n):
118+
if words[j] != "".join(w[j] for w in words if j < len(w)):
119+
return False
120+
return True
121+
```
103122

123+
```python
124+
class Solution:
125+
def validWordSquare(self, words: List[str]) -> bool:
126+
m = len(words)
127+
for i, w in enumerate(words):
128+
for j, c in enumerate(w):
129+
if j >= m or i >= len(words[j]) or c != words[j][i]:
130+
return False
131+
return True
104132
```
105133

106134
### **Java**
107135

108136
<!-- 这里可写当前语言的特殊实现逻辑 -->
109137

110138
```java
139+
class Solution {
140+
public boolean validWordSquare(List<String> words) {
141+
int m = words.size();
142+
for (int i = 0; i < m; ++i) {
143+
int n = words.get(i).length();
144+
for (int j = 0; j < n; ++j) {
145+
if (j >= m || i >= words.get(j).length()) {
146+
return false;
147+
}
148+
if (words.get(i).charAt(j) != words.get(j).charAt(i)) {
149+
return false;
150+
}
151+
}
152+
}
153+
return true;
154+
}
155+
}
156+
```
157+
158+
### **C++**
159+
160+
```cpp
161+
class Solution {
162+
public:
163+
bool validWordSquare(vector<string>& words) {
164+
int m = words.size();
165+
for (int i = 0; i < m; ++i) {
166+
int n = words[i].size();
167+
for (int j = 0; j < n; ++j) {
168+
if (j >= m || i >= words[j].size() || words[i][j] != words[j][i]) {
169+
return false;
170+
}
171+
}
172+
}
173+
return true;
174+
}
175+
};
176+
```
177+
178+
### **Go**
179+
180+
```go
181+
func validWordSquare(words []string) bool {
182+
m := len(words)
183+
for i, w := range words {
184+
for j := range w {
185+
if j >= m || i >= len(words[j]) || w[j] != words[j][i] {
186+
return false
187+
}
188+
}
189+
}
190+
return true
191+
}
192+
```
111193

194+
### **TypeScript**
195+
196+
```ts
197+
function validWordSquare(words: string[]): boolean {
198+
const m = words.length;
199+
for (let i = 0; i < m; ++i) {
200+
const n = words[i].length;
201+
for (let j = 0; j < n; ++j) {
202+
if (j >= m || i >= words[j].length || words[i][j] !== words[j][i]) {
203+
return false;
204+
}
205+
}
206+
}
207+
return true;
208+
}
112209
```
113210

114211
### **...**

solution/0400-0499/0422.Valid Word Square/README_EN.md

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,102 @@ Therefore, it is NOT a valid word square.
6161
### **Python3**
6262

6363
```python
64+
class Solution:
65+
def validWordSquare(self, words: List[str]) -> bool:
66+
m = len(words)
67+
n = max(len(w) for w in words)
68+
if m != n:
69+
return False
70+
for j in range(n):
71+
if words[j] != "".join(w[j] for w in words if j < len(w)):
72+
return False
73+
return True
74+
```
6475

76+
```python
77+
class Solution:
78+
def validWordSquare(self, words: List[str]) -> bool:
79+
m = len(words)
80+
for i, w in enumerate(words):
81+
for j, c in enumerate(w):
82+
if j >= m or i >= len(words[j]) or c != words[j][i]:
83+
return False
84+
return True
6585
```
6686

6787
### **Java**
6888

6989
```java
90+
class Solution {
91+
public boolean validWordSquare(List<String> words) {
92+
int m = words.size();
93+
for (int i = 0; i < m; ++i) {
94+
int n = words.get(i).length();
95+
for (int j = 0; j < n; ++j) {
96+
if (j >= m || i >= words.get(j).length()) {
97+
return false;
98+
}
99+
if (words.get(i).charAt(j) != words.get(j).charAt(i)) {
100+
return false;
101+
}
102+
}
103+
}
104+
return true;
105+
}
106+
}
107+
```
108+
109+
### **C++**
110+
111+
```cpp
112+
class Solution {
113+
public:
114+
bool validWordSquare(vector<string>& words) {
115+
int m = words.size();
116+
for (int i = 0; i < m; ++i) {
117+
int n = words[i].size();
118+
for (int j = 0; j < n; ++j) {
119+
if (j >= m || i >= words[j].size() || words[i][j] != words[j][i]) {
120+
return false;
121+
}
122+
}
123+
}
124+
return true;
125+
}
126+
};
127+
```
128+
129+
### **Go**
130+
131+
```go
132+
func validWordSquare(words []string) bool {
133+
m := len(words)
134+
for i, w := range words {
135+
for j := range w {
136+
if j >= m || i >= len(words[j]) || w[j] != words[j][i] {
137+
return false
138+
}
139+
}
140+
}
141+
return true
142+
}
143+
```
70144

145+
### **TypeScript**
146+
147+
```ts
148+
function validWordSquare(words: string[]): boolean {
149+
const m = words.length;
150+
for (let i = 0; i < m; ++i) {
151+
const n = words[i].length;
152+
for (let j = 0; j < n; ++j) {
153+
if (j >= m || i >= words[j].length || words[i][j] !== words[j][i]) {
154+
return false;
155+
}
156+
}
157+
}
158+
return true;
159+
}
71160
```
72161

73162
### **...**
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
class Solution {
2+
public:
3+
bool validWordSquare(vector<string>& words) {
4+
int m = words.size();
5+
for (int i = 0; i < m; ++i) {
6+
int n = words[i].size();
7+
for (int j = 0; j < n; ++j) {
8+
if (j >= m || i >= words[j].size() || words[i][j] != words[j][i]) {
9+
return false;
10+
}
11+
}
12+
}
13+
return true;
14+
}
15+
};
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
func validWordSquare(words []string) bool {
2+
m := len(words)
3+
for i, w := range words {
4+
for j := range w {
5+
if j >= m || i >= len(words[j]) || w[j] != words[j][i] {
6+
return false
7+
}
8+
}
9+
}
10+
return true
11+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class Solution {
2+
public boolean validWordSquare(List<String> words) {
3+
int m = words.size();
4+
for (int i = 0; i < m; ++i) {
5+
int n = words.get(i).length();
6+
for (int j = 0; j < n; ++j) {
7+
if (j >= m || i >= words.get(j).length()) {
8+
return false;
9+
}
10+
if (words.get(i).charAt(j) != words.get(j).charAt(i)) {
11+
return false;
12+
}
13+
}
14+
}
15+
return true;
16+
}
17+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
class Solution:
2+
def validWordSquare(self, words: List[str]) -> bool:
3+
m = len(words)
4+
for i, w in enumerate(words):
5+
for j, c in enumerate(w):
6+
if j >= m or i >= len(words[j]) or c != words[j][i]:
7+
return False
8+
return True
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
function validWordSquare(words: string[]): boolean {
2+
const m = words.length;
3+
for (let i = 0; i < m; ++i) {
4+
const n = words[i].length;
5+
for (let j = 0; j < n; ++j) {
6+
if (j >= m || i >= words[j].length || words[i][j] !== words[j][i]) {
7+
return false;
8+
}
9+
}
10+
}
11+
return true;
12+
}

0 commit comments

Comments
 (0)