题目描述
给一个字符串,求长度为m的所有不重复的子串。 比如字符串"aaab",我们求长度为2的子串,那么依次为"aa","aa","ab",那么不重复的子串为"aa","ab"
输入
第一行是一个整数K,表示样例的个数。 每个样例的第一行是一个整数m,表示所求子串的长度。 第二行是一个字符串,字符串全部由小写英文字母组成,长度不超过100。
输出
按字典序输出所有不重复子串,每个样例最后输出一个空行。
样例输入
2 2 aaab 3 aaab
样例输出
aa ab aaa aab
注意理解吧,及其暴力吧我。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
int p,i,j,k,a,qq;
scanf("%d",&p);
char o[99999];
int q[99999]= {0};
scanf("%s",o);
k=strlen(o);
qq=k-p+1;
for(i=0; i<qq; i++)
{
for(j=i+1; j<qq; j++)
{
int b=0;
for(a=0; a<p; a++)
{
if(o[i+a]==o[j+a])
{
b++;
}
}
if(b==p)
{
q[j]=1;
}
}
}
char m[110][110];
for(i=0; i<(qq); i++)
{
int mm=0;
if(q[i]==1)
continue;
for(j=i; j<p+i; j++)
{
m[i][mm]=o[j];
mm++;
}
}
int xm[9999],num;
for(i=0; i<qq; i++)
{
if(q[i]==1)
continue;
for(j=i+1; j<qq; j++)
{
if(q[j]==1)
{
continue;
}
if(strcmp(m[i],m[j])>0)
{
for(num=0; num<p; num++)
{
xm[i]=m[i][num];
m[i][num]=m[j][num];
m[j][num]=xm[i];
}
}
}
}
for(i=0; i<qq; i++)
{
if(q[i]==1)
continue;
for(j=0; j<p; j++)
{
printf("%c",m[i][j]);
}
printf("\n");
}
printf("\n");
}
return 0;
}