输入包含多行,第一行包含一个整数n,代表字符串数组strs的长度,后面n行,每行一个字符串,代表strs[i](保证所有字符串长度都小于10)。
输出一行,包含一个字符串,代表返回的字典序最小的字符串。
2 abc de
abcde
2 b ba
bab
时间复杂度,额外空间复杂度。
#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAXLEN 11 int comp(const void *a, const void *b); int main(void) { int n; char **strs, *str, *res; scanf("%d", &n); strs = (char **) malloc(sizeof(char *) * n); for (int i = 0; i < n; i++) { str = (char *) malloc(MAXLEN); scanf("%s", str); strs[i] = str; } qsort(strs, n, sizeof(char *), comp); res = (char *) malloc((MAXLEN - 1) * n + 1); res[0] = '\0'; for (int i = 0; i < n; i++) { strcat(res, strs[i]); free(strs[i]); } printf("%s\n", res); free(strs); free(res); return 0; } int comp(const void *a, const void *b) { char *s1, *s2; s1 = (char *) calloc(MAXLEN << 1, 1); s2 = (char *) calloc(MAXLEN << 1, 1); strcat(s1, *(char **) a); strcat(s1, *(char **) b); strcat(s2, *(char **) b); strcat(s2, *(char **) a); int ans = strcmp(s1, s2); free(s1); free(s2); return ans; }