用c语言写呢
时间: 2023-10-11 12:09:35 浏览: 21
当然可以用 C 语言来实现构建回文字符串的算法。下面是 C 语言的实现代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_N 100000
int count[256];
char* build_palindrome(char* s) {
int len = strlen(s);
memset(count, 0, sizeof(count));
// 统计每个字符出现的次数
for (int i = 0; i < len; i++) {
count[(int)s[i]]++;
}
int has_center = 0;
char* center = "";
char* left = "";
char* right = "";
for (int i = 0; i < 256; i++) {
if (count[i] % 2 == 0) {
left = (char*)malloc(sizeof(char) * (count[i] / 2 + strlen(left) + 1));
right = (char*)malloc(sizeof(char) * (count[i] / 2 + strlen(right) + 1));
for (int j = 0; j < count[i] / 2; j++) {
left[strlen(left)] = (char)i;
right[strlen(right)] = (char)i;
}
left[strlen(left)] = '\0';
right[strlen(right)] = '\0';
} else {
if (has_center) {
return NULL;
}
center = (char*)malloc(sizeof(char) * (count[i] + 1));
for (int j = 0; j < count[i]; j++) {
center[strlen(center)] = (char)i;
}
center[strlen(center)] = '\0';
has_center = 1;
}
}
char* result = (char*)malloc(sizeof(char) * (len + 1));
result[0] = '\0';
strcat(result, left);
strcat(result, center);
strcat(result, right);
free(center);
free(left);
free(right);
return result;
}
int main() {
char s[MAX_N];
scanf("%s", s);
char* result = build_palindrome(s);
if (result) {
printf("%s\n", result);
free(result);
} else {
printf("Cannot build palindrome\n");
}
return 0;
}
```
该代码的时间复杂度同样为 $O(n)$,其中 $n$ 是字符串的长度。需要注意的是,在 C 语言中,需要使用动态内存分配来存储构建回文字符串的结果。同时,在使用完毕后,需要记得释放动态分配的内存,以免出现内存泄漏。