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 76a5f03

Browse files
feat: add c solutions to lc problems: No.0005,0006 (#4458)
1 parent ec0dc28 commit 76a5f03

File tree

6 files changed

+222
-1
lines changed

6 files changed

+222
-1
lines changed

‎solution/0000-0099/0005.Longest Palindromic Substring/README.md‎

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,42 @@ public class Solution {
277277
}
278278
```
279279

280+
#### C
281+
282+
```c
283+
char* longestPalindrome(char* s) {
284+
int n = strlen(s);
285+
bool** f = (bool**) malloc(n * sizeof(bool*));
286+
for (int i = 0; i < n; ++i) {
287+
f[i] = (bool*) malloc(n * sizeof(bool));
288+
for (int j = 0; j < n; ++j) {
289+
f[i][j] = true;
290+
}
291+
}
292+
int k = 0, mx = 1;
293+
for (int i = n - 2; ~i; --i) {
294+
for (int j = i + 1; j < n; ++j) {
295+
f[i][j] = false;
296+
if (s[i] == s[j]) {
297+
f[i][j] = f[i + 1][j - 1];
298+
if (f[i][j] && mx < j - i + 1) {
299+
mx = j - i + 1;
300+
k = i;
301+
}
302+
}
303+
}
304+
}
305+
char* res = (char*) malloc((mx + 1) * sizeof(char));
306+
strncpy(res, s + k, mx);
307+
res[mx] = '0円';
308+
for (int i = 0; i < n; ++i) {
309+
free(f[i]);
310+
}
311+
free(f);
312+
return res;
313+
}
314+
```
315+
280316
#### Nim
281317
282318
```nim

‎solution/0000-0099/0005.Longest Palindromic Substring/README_EN.md‎

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,42 @@ public class Solution {
275275
}
276276
```
277277

278+
#### C
279+
280+
```c
281+
char* longestPalindrome(char* s) {
282+
int n = strlen(s);
283+
bool** f = (bool**) malloc(n * sizeof(bool*));
284+
for (int i = 0; i < n; ++i) {
285+
f[i] = (bool*) malloc(n * sizeof(bool));
286+
for (int j = 0; j < n; ++j) {
287+
f[i][j] = true;
288+
}
289+
}
290+
int k = 0, mx = 1;
291+
for (int i = n - 2; ~i; --i) {
292+
for (int j = i + 1; j < n; ++j) {
293+
f[i][j] = false;
294+
if (s[i] == s[j]) {
295+
f[i][j] = f[i + 1][j - 1];
296+
if (f[i][j] && mx < j - i + 1) {
297+
mx = j - i + 1;
298+
k = i;
299+
}
300+
}
301+
}
302+
}
303+
char* res = (char*) malloc((mx + 1) * sizeof(char));
304+
strncpy(res, s + k, mx);
305+
res[mx] = '0円';
306+
for (int i = 0; i < n; ++i) {
307+
free(f[i]);
308+
}
309+
free(f);
310+
return res;
311+
}
312+
```
313+
278314
#### Nim
279315
280316
```nim
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
char* longestPalindrome(char* s) {
2+
int n = strlen(s);
3+
bool** f = (bool**) malloc(n * sizeof(bool*));
4+
for (int i = 0; i < n; ++i) {
5+
f[i] = (bool*) malloc(n * sizeof(bool));
6+
for (int j = 0; j < n; ++j) {
7+
f[i][j] = true;
8+
}
9+
}
10+
int k = 0, mx = 1;
11+
for (int i = n - 2; ~i; --i) {
12+
for (int j = i + 1; j < n; ++j) {
13+
f[i][j] = false;
14+
if (s[i] == s[j]) {
15+
f[i][j] = f[i + 1][j - 1];
16+
if (f[i][j] && mx < j - i + 1) {
17+
mx = j - i + 1;
18+
k = i;
19+
}
20+
}
21+
}
22+
}
23+
char* res = (char*) malloc((mx + 1) * sizeof(char));
24+
strncpy(res, s + k, mx);
25+
res[mx] = '0円';
26+
for (int i = 0; i < n; ++i) {
27+
free(f[i]);
28+
}
29+
free(f);
30+
return res;
31+
}

‎solution/0000-0099/0006.Zigzag Conversion/README.md‎

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,47 @@ public class Solution {
282282
}
283283
```
284284

285+
#### C
286+
287+
```c
288+
char* convert(char* s, int numRows) {
289+
if (numRows == 1) {
290+
return strdup(s);
291+
}
292+
293+
int len = strlen(s);
294+
char** g = (char**) malloc(numRows * sizeof(char*));
295+
int* idx = (int*) malloc(numRows * sizeof(int));
296+
for (int i = 0; i < numRows; ++i) {
297+
g[i] = (char*) malloc((len + 1) * sizeof(char));
298+
idx[i] = 0;
299+
}
300+
301+
int i = 0, k = -1;
302+
for (int p = 0; p < len; ++p) {
303+
g[i][idx[i]++] = s[p];
304+
if (i == 0 || i == numRows - 1) {
305+
k = -k;
306+
}
307+
i += k;
308+
}
309+
310+
char* ans = (char*) malloc((len + 1) * sizeof(char));
311+
int pos = 0;
312+
for (int r = 0; r < numRows; ++r) {
313+
for (int j = 0; j < idx[r]; ++j) {
314+
ans[pos++] = g[r][j];
315+
}
316+
free(g[r]);
317+
}
318+
ans[pos] = '0円';
319+
320+
free(g);
321+
free(idx);
322+
return ans;
323+
}
324+
```
325+
285326
<!-- tabs:end -->
286327
287328
<!-- solution:end -->
@@ -491,7 +532,7 @@ class Solution {
491532
return $result;
492533
}
493534
}
494-
```
535+
``
495536

496537
<!-- tabs:end -->
497538

‎solution/0000-0099/0006.Zigzag Conversion/README_EN.md‎

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,47 @@ public class Solution {
280280
}
281281
```
282282

283+
#### C
284+
285+
```c
286+
char* convert(char* s, int numRows) {
287+
if (numRows == 1) {
288+
return strdup(s);
289+
}
290+
291+
int len = strlen(s);
292+
char** g = (char**) malloc(numRows * sizeof(char*));
293+
int* idx = (int*) malloc(numRows * sizeof(int));
294+
for (int i = 0; i < numRows; ++i) {
295+
g[i] = (char*) malloc((len + 1) * sizeof(char));
296+
idx[i] = 0;
297+
}
298+
299+
int i = 0, k = -1;
300+
for (int p = 0; p < len; ++p) {
301+
g[i][idx[i]++] = s[p];
302+
if (i == 0 || i == numRows - 1) {
303+
k = -k;
304+
}
305+
i += k;
306+
}
307+
308+
char* ans = (char*) malloc((len + 1) * sizeof(char));
309+
int pos = 0;
310+
for (int r = 0; r < numRows; ++r) {
311+
for (int j = 0; j < idx[r]; ++j) {
312+
ans[pos++] = g[r][j];
313+
}
314+
free(g[r]);
315+
}
316+
ans[pos] = '0円';
317+
318+
free(g);
319+
free(idx);
320+
return ans;
321+
}
322+
```
323+
283324
<!-- tabs:end -->
284325
285326
<!-- solution:end -->
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
char* convert(char* s, int numRows) {
2+
if (numRows == 1) {
3+
return strdup(s);
4+
}
5+
6+
int len = strlen(s);
7+
char** g = (char**) malloc(numRows * sizeof(char*));
8+
int* idx = (int*) malloc(numRows * sizeof(int));
9+
for (int i = 0; i < numRows; ++i) {
10+
g[i] = (char*) malloc((len + 1) * sizeof(char));
11+
idx[i] = 0;
12+
}
13+
14+
int i = 0, k = -1;
15+
for (int p = 0; p < len; ++p) {
16+
g[i][idx[i]++] = s[p];
17+
if (i == 0 || i == numRows - 1) {
18+
k = -k;
19+
}
20+
i += k;
21+
}
22+
23+
char* ans = (char*) malloc((len + 1) * sizeof(char));
24+
int pos = 0;
25+
for (int r = 0; r < numRows; ++r) {
26+
for (int j = 0; j < idx[r]; ++j) {
27+
ans[pos++] = g[r][j];
28+
}
29+
free(g[r]);
30+
}
31+
ans[pos] = '0円';
32+
33+
free(g);
34+
free(idx);
35+
return ans;
36+
}

0 commit comments

Comments
(0)

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