-
题目描述:
-
给出一个01字符串(长度不超过100),求其每一个子串出现的次数。
-
输入:
-
输入包含多行,每行一个字符串。
-
输出:
-
对每个字符串,输出它所有出现次数在1次以上的子串和这个子串出现的次数,输出按字典序排序。
-
样例输入:
-
10101
-
样例输出:
-
0 2 01 2 1 3 10 2 101 2
#include "iostream"
#include "stdio.h"
#include "math.h"
#include "map"
#include "vector"
#include "queue"
#include "memory.h"
#include "algorithm"
#include "string"
using namespace std;
#define N 105
#define INF 1<<30
struct DIC
{
char s[105];
}d[100000];
int comp(const void *a,const void *b)
{
DIC *A=(DIC*)a;
DIC* B=(DIC*)b;
return strcmp(A->s,B->s);
}
int main()
{
char str[105];
int i,j,k,ind=0;
char tmp[105];
while(cin>>str)
{
ind=0;
int len=strlen(str);
for(i=1;i<=len;i++)
{
for(j=0;j+i<=len;j++)
{
memset(tmp,'\0',sizeof(tmp));
for(k=0;k<i;k++)
tmp[k]=str[k+j];
strcpy(d[ind++].s,tmp);
}
}
qsort(d,ind,sizeof(d[0]),comp);
for(i=0;i<ind;i++)
{
int num=1;
while(i+1<ind&&strcmp(d[i].s,d[i+1].s)==0)
num++,i++;
if(num>1)
printf("%s %d\n",d[i].s,num);
}
}
}