题目描述
给一个字符串,求长度为m的所有不重复的子串。 比如字符串"aaab",我们求长度为2的子串,那么依次为"aa","aa","ab",那么不重复的子串为"aa","ab"
输入
第一行是一个整数K,表示样例的个数。 每个样例的第一行是一个整数m,表示所求子串的长度。 第二行是一个字符串,字符串全部由小写英文字母组成,长度不超过100。
输出
按字典序输出所有不重复子串,每个样例最后输出一个空行。
样例输入
2
2
aaab
3
aaab
样例输出
aa
ab
aaa
这道题可以定义一个二维数组用来存放字符串的所有子串,然后排序,最后一个个输出,遇到相同的只输出一个。
完整代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
#include <stdio.h> #include <string.h> int main() { int k,i,j,len,n,l,m; char str[105]={0},a[102][101]={0},temp[100]; scanf ( "%d" ,&k); while (k--) { n = 0; scanf ( "%d" ,&m); scanf ( "%s" ,str); len = strlen (str); for (i = 0;i <= len-m;i++) { l = 0; for (j = i;j < i+m;j++,l++) { a[n][l] = str[j]; //子串 } n++; } for (i = 0; i < n; i++) //排序 { for (j = i+1; j < n; j++) { if ( strcmp (a[i],a[j])>0) { strcpy (temp,a[i]); strcpy (a[i],a[j]); strcpy (a[j],temp); } } } for (i = 0;i < n;i++) { if ( strcmp (a[i],a[i+1])==0) //相同的只输出第一个 continue ; for (j = 0;j < m;j++) printf ( "%c" ,a[i][j]); printf ( "\n" ); } printf ( "\n" ); memset (str, '\0' , sizeof (str)); memset (a, '\0' , sizeof (a)); memset (temp, '\0' , sizeof (temp)); } return 0; } |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/m0_61465701/article/details/121778483