删除网站备案与注销,网站架构设计师工资水平,郑州建设网站,做机械产品用什么网站题目
给你两个字符串#xff0c;看你能不能将第一个字符变化位置#xff08;重排#xff09;#xff0c;变成和第二个字符串的26个字母一一对应。 解题思路#xff1a;将两个字符串的各个字符的数量统计出来#xff0c;如果各个字符串的数量都是一样的#xff0c;那么就…题目
给你两个字符串看你能不能将第一个字符变化位置重排变成和第二个字符串的26个字母一一对应。 解题思路将两个字符串的各个字符的数量统计出来如果各个字符串的数量都是一样的那么就输出yes否则输出no
题目分析
对题目整体进行分析字母可以重新排列所以字母的位置是不重要的重要的是每个字母出现的次数只需要将两个字符串每个字母出现的次数进行统计然后排序一次比较字幕出现的次数是否相同即可得出两个字符串是否可以互相变化。
代码
#includestdio.h
#includestring.h
#includememory.h
void swap(int* a,int* b){//交换 int t;t*a;*a*b;*bt;
}
int partition(int a[],int p,int q){//快速排序partition过程 int xa[q];int ip-1,j;for(jp;jq;j){if(a[j]x){swap(a[i],a[j]);}}swap(a[i],a[q]);return i;
}
void quicksort(int a[],int p,int q){//快速排序 int mpartition(a,p,q);quicksort(a,p,m-1);quicksort(a,m1,q);
}
int main(){char a[105],b[105];//定义两个字符串 int countA[26],countB[26];//记录每一个字母出现的次数 memset(a,0,sizeof(a));memset(b,0,sizeof(b));while(scanf(%s%s,a,b)2){memset(countA,0,sizeof(countA));memset(countB,0,sizeof(countB));int lenstrlen(a);int i;for(i0;ilen;i){//统计每个字母出现的次数 countA[a[i]-A];countB[b[i]-A];}quicksort(countA,0,25);quicksort(countB,0,25);for(i0;i26;i){//如果相应位置的字母出现的次数不同尽管映射也不可能匹配 if(countA[i]!countB[i]){break;}}if(i26){//最终执行完循环没有退出完全匹配 printf(yes);}else{printf(no);}}
}