Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit fe3eeb4

Browse files
feat: add c solutions to lc problems: No.0010,0011 (#4508)
1 parent 0fcbf87 commit fe3eeb4

File tree

7 files changed

+255
-0
lines changed

7 files changed

+255
-0
lines changed

‎solution/0000-0099/0010.Regular Expression Matching/README.md‎

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,44 @@ public class Solution {
331331
}
332332
```
333333

334+
#### C
335+
336+
```c
337+
#define MAX_LEN 1000
338+
339+
char *ss, *pp;
340+
int m, n;
341+
int f[MAX_LEN + 1][MAX_LEN + 1];
342+
343+
bool dfs(int i, int j) {
344+
if (j >= n) {
345+
return i == m;
346+
}
347+
if (f[i][j] != 0) {
348+
return f[i][j] == 1;
349+
}
350+
int res = -1;
351+
if (j + 1 < n && pp[j + 1] == '*') {
352+
if (dfs(i, j + 2) || (i < m && (ss[i] == pp[j] || pp[j] == '.') && dfs(i + 1, j))) {
353+
res = 1;
354+
}
355+
} else if (i < m && (ss[i] == pp[j] || pp[j] == '.') && dfs(i + 1, j + 1)) {
356+
res = 1;
357+
}
358+
f[i][j] = res;
359+
return res == 1;
360+
}
361+
362+
bool isMatch(char* s, char* p) {
363+
ss = s;
364+
pp = p;
365+
m = strlen(s);
366+
n = strlen(p);
367+
memset(f, 0, sizeof(f));
368+
return dfs(0, 0);
369+
}
370+
```
371+
334372
<!-- tabs:end -->
335373
336374
<!-- solution:end -->
@@ -579,6 +617,31 @@ class Solution {
579617
}
580618
```
581619

620+
#### C
621+
622+
```c
623+
bool isMatch(char* s, char* p) {
624+
int m = strlen(s), n = strlen(p);
625+
bool f[m + 1][n + 1];
626+
memset(f, 0, sizeof(f));
627+
f[0][0] = true;
628+
629+
for (int i = 0; i <= m; ++i) {
630+
for (int j = 1; j <= n; ++j) {
631+
if (p[j - 1] == '*') {
632+
f[i][j] = f[i][j - 2];
633+
if (i > 0 && (p[j - 2] == '.' || p[j - 2] == s[i - 1])) {
634+
f[i][j] = f[i][j] || f[i - 1][j];
635+
}
636+
} else if (i > 0 && (p[j - 1] == '.' || p[j - 1] == s[i - 1])) {
637+
f[i][j] = f[i - 1][j - 1];
638+
}
639+
}
640+
}
641+
return f[m][n];
642+
}
643+
```
644+
582645
<!-- tabs:end -->
583646
584647
<!-- solution:end -->

‎solution/0000-0099/0010.Regular Expression Matching/README_EN.md‎

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,44 @@ public class Solution {
330330
}
331331
```
332332

333+
#### C
334+
335+
```c
336+
#define MAX_LEN 1000
337+
338+
char *ss, *pp;
339+
int m, n;
340+
int f[MAX_LEN + 1][MAX_LEN + 1];
341+
342+
bool dfs(int i, int j) {
343+
if (j >= n) {
344+
return i == m;
345+
}
346+
if (f[i][j] != 0) {
347+
return f[i][j] == 1;
348+
}
349+
int res = -1;
350+
if (j + 1 < n && pp[j + 1] == '*') {
351+
if (dfs(i, j + 2) || (i < m && (ss[i] == pp[j] || pp[j] == '.') && dfs(i + 1, j))) {
352+
res = 1;
353+
}
354+
} else if (i < m && (ss[i] == pp[j] || pp[j] == '.') && dfs(i + 1, j + 1)) {
355+
res = 1;
356+
}
357+
f[i][j] = res;
358+
return res == 1;
359+
}
360+
361+
bool isMatch(char* s, char* p) {
362+
ss = s;
363+
pp = p;
364+
m = strlen(s);
365+
n = strlen(p);
366+
memset(f, 0, sizeof(f));
367+
return dfs(0, 0);
368+
}
369+
```
370+
333371
<!-- tabs:end -->
334372
335373
<!-- solution:end -->
@@ -578,6 +616,31 @@ class Solution {
578616
}
579617
```
580618

619+
#### C
620+
621+
```c
622+
bool isMatch(char* s, char* p) {
623+
int m = strlen(s), n = strlen(p);
624+
bool f[m + 1][n + 1];
625+
memset(f, 0, sizeof(f));
626+
f[0][0] = true;
627+
628+
for (int i = 0; i <= m; ++i) {
629+
for (int j = 1; j <= n; ++j) {
630+
if (p[j - 1] == '*') {
631+
f[i][j] = f[i][j - 2];
632+
if (i > 0 && (p[j - 2] == '.' || p[j - 2] == s[i - 1])) {
633+
f[i][j] = f[i][j] || f[i - 1][j];
634+
}
635+
} else if (i > 0 && (p[j - 1] == '.' || p[j - 1] == s[i - 1])) {
636+
f[i][j] = f[i - 1][j - 1];
637+
}
638+
}
639+
}
640+
return f[m][n];
641+
}
642+
```
643+
581644
<!-- tabs:end -->
582645
583646
<!-- solution:end -->
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#define MAX_LEN 1000
2+
3+
char *ss, *pp;
4+
int m, n;
5+
int f[MAX_LEN + 1][MAX_LEN + 1];
6+
7+
bool dfs(int i, int j) {
8+
if (j >= n) {
9+
return i == m;
10+
}
11+
if (f[i][j] != 0) {
12+
return f[i][j] == 1;
13+
}
14+
int res = -1;
15+
if (j + 1 < n && pp[j + 1] == '*') {
16+
if (dfs(i, j + 2) || (i < m && (ss[i] == pp[j] || pp[j] == '.') && dfs(i + 1, j))) {
17+
res = 1;
18+
}
19+
} else if (i < m && (ss[i] == pp[j] || pp[j] == '.') && dfs(i + 1, j + 1)) {
20+
res = 1;
21+
}
22+
f[i][j] = res;
23+
return res == 1;
24+
}
25+
26+
bool isMatch(char* s, char* p) {
27+
ss = s;
28+
pp = p;
29+
m = strlen(s);
30+
n = strlen(p);
31+
memset(f, 0, sizeof(f));
32+
return dfs(0, 0);
33+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
bool isMatch(char* s, char* p) {
2+
int m = strlen(s), n = strlen(p);
3+
bool f[m + 1][n + 1];
4+
memset(f, 0, sizeof(f));
5+
f[0][0] = true;
6+
7+
for (int i = 0; i <= m; ++i) {
8+
for (int j = 1; j <= n; ++j) {
9+
if (p[j - 1] == '*') {
10+
f[i][j] = f[i][j - 2];
11+
if (i > 0 && (p[j - 2] == '.' || p[j - 2] == s[i - 1])) {
12+
f[i][j] = f[i][j] || f[i - 1][j];
13+
}
14+
} else if (i > 0 && (p[j - 1] == '.' || p[j - 1] == s[i - 1])) {
15+
f[i][j] = f[i - 1][j - 1];
16+
}
17+
}
18+
}
19+
return f[m][n];
20+
}

‎solution/0000-0099/0011.Container With Most Water/README.md‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,33 @@ class Solution {
262262
}
263263
```
264264

265+
#### C
266+
267+
```c
268+
int min(int a, int b) {
269+
return a < b ? a : b;
270+
}
271+
272+
int max(int a, int b) {
273+
return a > b ? a : b;
274+
}
275+
276+
int maxArea(int* height, int heightSize) {
277+
int l = 0, r = heightSize - 1;
278+
int ans = 0;
279+
while (l < r) {
280+
int t = min(height[l], height[r]) * (r - l);
281+
ans = max(ans, t);
282+
if (height[l] < height[r]) {
283+
++l;
284+
} else {
285+
--r;
286+
}
287+
}
288+
return ans;
289+
}
290+
```
291+
265292
<!-- tabs:end -->
266293
267294
<!-- solution:end -->

‎solution/0000-0099/0011.Container With Most Water/README_EN.md‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,33 @@ class Solution {
259259
}
260260
```
261261

262+
#### C
263+
264+
```c
265+
int min(int a, int b) {
266+
return a < b ? a : b;
267+
}
268+
269+
int max(int a, int b) {
270+
return a > b ? a : b;
271+
}
272+
273+
int maxArea(int* height, int heightSize) {
274+
int l = 0, r = heightSize - 1;
275+
int ans = 0;
276+
while (l < r) {
277+
int t = min(height[l], height[r]) * (r - l);
278+
ans = max(ans, t);
279+
if (height[l] < height[r]) {
280+
++l;
281+
} else {
282+
--r;
283+
}
284+
}
285+
return ans;
286+
}
287+
```
288+
262289
<!-- tabs:end -->
263290
264291
<!-- solution:end -->
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
int min(int a, int b) {
2+
return a < b ? a : b;
3+
}
4+
5+
int max(int a, int b) {
6+
return a > b ? a : b;
7+
}
8+
9+
int maxArea(int* height, int heightSize) {
10+
int l = 0, r = heightSize - 1;
11+
int ans = 0;
12+
while (l < r) {
13+
int t = min(height[l], height[r]) * (r - l);
14+
ans = max(ans, t);
15+
if (height[l] < height[r]) {
16+
++l;
17+
} else {
18+
--r;
19+
}
20+
}
21+
return ans;
22+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /