Skip to content

Commit 81266b1

Browse files
authored
feat: update solutions to lc problems: No.2351~2355 (#2429)
1 parent 4de061f commit 81266b1

File tree

15 files changed

+56
-343
lines changed

15 files changed

+56
-343
lines changed

solution/2300-2399/2351.First Letter to Appear Twice/README_EN.md

+10-2
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,11 @@ The only letter that appears twice is 'd' so we return 'd'.
4949

5050
## Solutions
5151

52-
### Solution 1
52+
### Solution 1: Array or Hash Table
53+
54+
We traverse the string $s$, using an array or hash table `cnt` to record the occurrence of each letter. When a letter appears twice, we return that letter.
55+
56+
The time complexity is $O(n)$ and the space complexity is $O(C)$. Here, $n$ is the length of the string $s$, and $C$ is the size of the character set. In this problem, $C = 26$.
5357

5458
<!-- tabs:start -->
5559

@@ -164,7 +168,11 @@ char repeatedCharacter(char* s) {
164168
165169
<!-- tabs:end -->
166170
167-
### Solution 2
171+
### Solution 2: Bit Manipulation
172+
173+
We can also use an integer `mask` to record whether each letter has appeared, where the $i$-th bit of `mask` indicates whether the $i$-th letter has appeared. When a letter appears twice, we return that letter.
174+
175+
The time complexity is $O(n)$ and the space complexity is $O(1)$. Here, $n$ is the length of the string $s$.
168176
169177
<!-- tabs:start -->
170178

solution/2300-2399/2352.Equal Row and Column Pairs/README.md

+1-109
Original file line numberDiff line numberDiff line change
@@ -54,115 +54,7 @@
5454

5555
我们直接将矩阵 $grid$ 的每一行和每一列进行比较,如果相等,那么就是一对相等行列对,答案加一。
5656

57-
时间复杂度 $O(n^3)$,空间复杂度 $O(1)$。其中 $n$ 为矩阵 $grid$ 的行数或列数。
58-
59-
<!-- tabs:start -->
60-
61-
```python
62-
class Solution:
63-
def equalPairs(self, grid: List[List[int]]) -> int:
64-
g = [list(col) for col in zip(*grid)]
65-
return sum(row == col for row in grid for col in g)
66-
```
67-
68-
```java
69-
class Solution {
70-
public int equalPairs(int[][] grid) {
71-
int n = grid.length;
72-
int[][] g = new int[n][n];
73-
for (int j = 0; j < n; ++j) {
74-
for (int i = 0; i < n; ++i) {
75-
g[i][j] = grid[j][i];
76-
}
77-
}
78-
int ans = 0;
79-
for (var row : grid) {
80-
for (var col : g) {
81-
int ok = 1;
82-
for (int i = 0; i < n; ++i) {
83-
if (row[i] != col[i]) {
84-
ok = 0;
85-
break;
86-
}
87-
}
88-
ans += ok;
89-
}
90-
}
91-
return ans;
92-
}
93-
}
94-
```
95-
96-
```cpp
97-
class Solution {
98-
public:
99-
int equalPairs(vector<vector<int>>& grid) {
100-
int n = grid.size();
101-
vector<vector<int>> g(n, vector<int>(n));
102-
for (int j = 0; j < n; ++j) {
103-
for (int i = 0; i < n; ++i) {
104-
g[i][j] = grid[j][i];
105-
}
106-
}
107-
int ans = 0;
108-
for (auto& row : grid) {
109-
for (auto& col : g) {
110-
ans += row == col;
111-
}
112-
}
113-
return ans;
114-
}
115-
};
116-
```
117-
118-
```go
119-
func equalPairs(grid [][]int) (ans int) {
120-
n := len(grid)
121-
g := make([][]int, n)
122-
for i := range g {
123-
g[i] = make([]int, n)
124-
for j := 0; j < n; j++ {
125-
g[i][j] = grid[j][i]
126-
}
127-
}
128-
for _, row := range grid {
129-
for _, col := range g {
130-
ok := 1
131-
for i, v := range row {
132-
if v != col[i] {
133-
ok = 0
134-
break
135-
}
136-
}
137-
ans += ok
138-
}
139-
}
140-
return
141-
}
142-
```
143-
144-
```ts
145-
function equalPairs(grid: number[][]): number {
146-
const n = grid.length;
147-
const g = Array.from({ length: n }, () => Array.from({ length: n }, () => 0));
148-
for (let j = 0; j < n; ++j) {
149-
for (let i = 0; i < n; ++i) {
150-
g[i][j] = grid[j][i];
151-
}
152-
}
153-
let ans = 0;
154-
for (const row of grid) {
155-
for (const col of g) {
156-
ans += Number(row.toString() === col.toString());
157-
}
158-
}
159-
return ans;
160-
}
161-
```
162-
163-
<!-- tabs:end -->
164-
165-
### 方法二
57+
时间复杂度 $O(n^3)$,其中 $n$ 为矩阵 $grid$ 的行数或列数。空间复杂度 $O(1)$。
16658

16759
<!-- tabs:start -->
16860

solution/2300-2399/2352.Equal Row and Column Pairs/README_EN.md

+3-107
Original file line numberDiff line numberDiff line change
@@ -42,115 +42,11 @@
4242

4343
## Solutions
4444

45-
### Solution 1
45+
### Solution 1: Simulation
4646

47-
<!-- tabs:start -->
48-
49-
```python
50-
class Solution:
51-
def equalPairs(self, grid: List[List[int]]) -> int:
52-
g = [list(col) for col in zip(*grid)]
53-
return sum(row == col for row in grid for col in g)
54-
```
55-
56-
```java
57-
class Solution {
58-
public int equalPairs(int[][] grid) {
59-
int n = grid.length;
60-
int[][] g = new int[n][n];
61-
for (int j = 0; j < n; ++j) {
62-
for (int i = 0; i < n; ++i) {
63-
g[i][j] = grid[j][i];
64-
}
65-
}
66-
int ans = 0;
67-
for (var row : grid) {
68-
for (var col : g) {
69-
int ok = 1;
70-
for (int i = 0; i < n; ++i) {
71-
if (row[i] != col[i]) {
72-
ok = 0;
73-
break;
74-
}
75-
}
76-
ans += ok;
77-
}
78-
}
79-
return ans;
80-
}
81-
}
82-
```
83-
84-
```cpp
85-
class Solution {
86-
public:
87-
int equalPairs(vector<vector<int>>& grid) {
88-
int n = grid.size();
89-
vector<vector<int>> g(n, vector<int>(n));
90-
for (int j = 0; j < n; ++j) {
91-
for (int i = 0; i < n; ++i) {
92-
g[i][j] = grid[j][i];
93-
}
94-
}
95-
int ans = 0;
96-
for (auto& row : grid) {
97-
for (auto& col : g) {
98-
ans += row == col;
99-
}
100-
}
101-
return ans;
102-
}
103-
};
104-
```
105-
106-
```go
107-
func equalPairs(grid [][]int) (ans int) {
108-
n := len(grid)
109-
g := make([][]int, n)
110-
for i := range g {
111-
g[i] = make([]int, n)
112-
for j := 0; j < n; j++ {
113-
g[i][j] = grid[j][i]
114-
}
115-
}
116-
for _, row := range grid {
117-
for _, col := range g {
118-
ok := 1
119-
for i, v := range row {
120-
if v != col[i] {
121-
ok = 0
122-
break
123-
}
124-
}
125-
ans += ok
126-
}
127-
}
128-
return
129-
}
130-
```
131-
132-
```ts
133-
function equalPairs(grid: number[][]): number {
134-
const n = grid.length;
135-
const g = Array.from({ length: n }, () => Array.from({ length: n }, () => 0));
136-
for (let j = 0; j < n; ++j) {
137-
for (let i = 0; i < n; ++i) {
138-
g[i][j] = grid[j][i];
139-
}
140-
}
141-
let ans = 0;
142-
for (const row of grid) {
143-
for (const col of g) {
144-
ans += Number(row.toString() === col.toString());
145-
}
146-
}
147-
return ans;
148-
}
149-
```
150-
151-
<!-- tabs:end -->
47+
We directly compare each row and column of the matrix $grid$. If they are equal, then it is a pair of equal row-column pairs, and we increment the answer by one.
15248

153-
### Solution 2
49+
The time complexity is $O(n^3)$, where $n$ is the number of rows or columns in the matrix $grid$. The space complexity is $O(1)$.
15450

15551
<!-- tabs:start -->
15652

solution/2300-2399/2352.Equal Row and Column Pairs/Solution.cpp

+10-9
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,17 @@ class Solution {
22
public:
33
int equalPairs(vector<vector<int>>& grid) {
44
int n = grid.size();
5-
vector<vector<int>> g(n, vector<int>(n));
6-
for (int j = 0; j < n; ++j) {
7-
for (int i = 0; i < n; ++i) {
8-
g[i][j] = grid[j][i];
9-
}
10-
}
115
int ans = 0;
12-
for (auto& row : grid) {
13-
for (auto& col : g) {
14-
ans += row == col;
6+
for (int i = 0; i < n; ++i) {
7+
for (int j = 0; j < n; ++j) {
8+
int ok = 1;
9+
for (int k = 0; k < n; ++k) {
10+
if (grid[i][k] != grid[k][j]) {
11+
ok = 0;
12+
break;
13+
}
14+
}
15+
ans += ok;
1516
}
1617
}
1718
return ans;

solution/2300-2399/2352.Equal Row and Column Pairs/Solution.go

+4-12
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,9 @@
11
func equalPairs(grid [][]int) (ans int) {
2-
n := len(grid)
3-
g := make([][]int, n)
4-
for i := range g {
5-
g[i] = make([]int, n)
6-
for j := 0; j < n; j++ {
7-
g[i][j] = grid[j][i]
8-
}
9-
}
10-
for _, row := range grid {
11-
for _, col := range g {
2+
for i := range grid {
3+
for j := range grid {
124
ok := 1
13-
for i, v := range row {
14-
if v != col[i] {
5+
for k := range grid {
6+
if grid[i][k] != grid[k][j] {
157
ok = 0
168
break
179
}

solution/2300-2399/2352.Equal Row and Column Pairs/Solution.java

+4-10
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,12 @@
11
class Solution {
22
public int equalPairs(int[][] grid) {
33
int n = grid.length;
4-
int[][] g = new int[n][n];
5-
for (int j = 0; j < n; ++j) {
6-
for (int i = 0; i < n; ++i) {
7-
g[i][j] = grid[j][i];
8-
}
9-
}
104
int ans = 0;
11-
for (var row : grid) {
12-
for (var col : g) {
5+
for (int i = 0; i < n; ++i) {
6+
for (int j = 0; j < n; ++j) {
137
int ok = 1;
14-
for (int i = 0; i < n; ++i) {
15-
if (row[i] != col[i]) {
8+
for (int k = 0; k < n; ++k) {
9+
if (grid[i][k] != grid[k][j]) {
1610
ok = 0;
1711
break;
1812
}
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
class Solution:
22
def equalPairs(self, grid: List[List[int]]) -> int:
3-
g = [list(col) for col in zip(*grid)]
4-
return sum(row == col for row in grid for col in g)
3+
n = len(grid)
4+
ans = 0
5+
for i in range(n):
6+
for j in range(n):
7+
ans += all(grid[i][k] == grid[k][j] for k in range(n))
8+
return ans

solution/2300-2399/2352.Equal Row and Column Pairs/Solution.ts

+10-9
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
function equalPairs(grid: number[][]): number {
22
const n = grid.length;
3-
const g = Array.from({ length: n }, () => Array.from({ length: n }, () => 0));
4-
for (let j = 0; j < n; ++j) {
5-
for (let i = 0; i < n; ++i) {
6-
g[i][j] = grid[j][i];
7-
}
8-
}
93
let ans = 0;
10-
for (const row of grid) {
11-
for (const col of g) {
12-
ans += Number(row.toString() === col.toString());
4+
for (let i = 0; i < n; ++i) {
5+
for (let j = 0; j < n; ++j) {
6+
let ok = 1;
7+
for (let k = 0; k < n; ++k) {
8+
if (grid[i][k] !== grid[k][j]) {
9+
ok = 0;
10+
break;
11+
}
12+
}
13+
ans += ok;
1314
}
1415
}
1516
return ans;

solution/2300-2399/2352.Equal Row and Column Pairs/Solution2.cpp

-20
This file was deleted.

0 commit comments

Comments
 (0)