当前位置: 代码迷 >> 综合 >> xdoj 1191: 统计相似字符串
  详细解决方案

xdoj 1191: 统计相似字符串

热度:84   发布时间:2023-10-29 01:29:18.0

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就停止输出了呢