1191: 统计相似字符串
时间限制: 1 Sec 内存限制: 128 MB
提交: 1742 解决: 259
[提交][状态][讨论版]
题目描述
给N个字符串,请将他们以相同的组成元素(即组成的元素种类相同,每种元素的个数也一样)来分类,分类后按照原本出现的顺序输出!
输入
多组数据,最多100组数据,每组最多N<5000个字符串,每个字符串长度最多|s|<=8,保证都是小写字母
输出
输出多行,每行为同一类别的字符串组
样例输入
6
eat tea tan ate nat bat
样例输出
eat tea ate
tan nat
bat
提示
来源
youqh
#include<stdio.h>
#include<math.h>
#include<string.h>
#define max(a,b) (a>b)? b:a
char string[5000][9];
char hash[5000][150];
int main()
{
int n,i,j;
while(scanf("%d",&n)!=EOF)
{
memset(hash,0,sizeof(hash));
for(i=0;i<n;i++)
{
scanf("%s",&string[i]);
int l=strlen(string[i]);
for(j=0;j<l;j++)
{
hash[i][string[i][j]]++;
}
}
int flag[n];
memset(flag,0,sizeof(flag));
for(i=0;i<n;i++)
{
if(flag[i]==1)
continue;
if(flag[i]==0)
{
printf("%s",string[i]);
flag[i]=1;
}
for(j=i+1;j<n;j++)
{
int k,count=0;
for(k=97;k<123;k++)
{
if(hash[i][k]==hash[j][k])
count++;
}
if((count==26)&&(flag[j]==0))
{
printf(" %s",string[j]);
flag[j]=1;
}
}
printf("\n");
}
}
return 0;
#include<stdio.h>
#include<math.h>
#include<string.h>
#define max(a,b) (a>b)? b:a
char string[5000][9];
char hash[5000][27];
int main()
{
int n,i,j;
while(scanf("%d",&n)!=EOF)
{
memset(hash,1,sizeof(hash));
int k;
for(k=0;k<n;k++)
{
hash[k][26]=0;
}
for(i=0;i<n;i++)
{
scanf("%s",&string[i]);
int l=strlen(string[i]);
for(j=0;j<l;j++)
{
hash[i][string[i][j]-97]++;
}
}
int flag[n];
memset(flag,0,sizeof(flag));
for(i=0;i<n;i++)
{
if(flag[i]==1)
continue;
if(flag[i]==0)
{
printf("%s",string[i]);
flag[i]=1;
}
for(j=i+1;j<n;j++)
{
if((strcmp(hash[i],hash[j])==0)&&(flag[j]==0))
{
printf(" %s",string[j]);
flag[j]=1;
}
}
printf("\n");
}
}
return 0;
} //就是因为对hash初始化的不同
默认字符串输出的时候遇到0就停止输出了呢