UVA 1339 - Ancient Cipher

本文解决UVA1339题目中的两个字符串匹配问题,通过统计并比较两个字符串中各字符出现次数的方法来判断它们是否可以通过字符替换和重新排序达到一致。采用数组记录字符数量,并进行排序比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载: https://blog.youkuaiyun.com/huatian5/article/details/51477297

题意太关键了,是两个字符串,让你对其中一个字符串操作。操作内容是,可以将这个字符串任意排列,然后将这个字符串中所有相同的字符随意映射成其他一种字符,使得映射后的字符串与另一个字符串相同。

所以只需要将所有相同字符的数量记录下来,与另一个字符串比较有没有这个数量的字符就行了。

(用数组存放每个字符的数量)

给定两个长度分别为n的字符串,判断他们能否一一对应

代码如下:

[cpp]  view plain  copy
  1. #include<iostream>//UVA1339  
  2. #include<cstdio>  
  3. #include<cstring>  
  4. #include<algorithm>  
  5. using namespace std;  
  6. int main()  
  7. {  
  8.     char str1[105],str2[105];  
  9.     while(~scanf("%s%s",str1,str2))  
  10.     {  
  11.         int len=strlen(str1);  
  12.         int cnt1[26]={0},cnt2[26]={0};  
  13.         for(int i=0;i<len;i++)  
  14.         {  
  15.             cnt1[str1[i]-'A']++;  
  16.             cnt2[str2[i]-'A']++;  
  17.         }  
  18.         sort(cnt1,cnt1+26);  
  19.         sort(cnt2,cnt2+26);  
  20.         int flag=0;  
  21.         for(int i=1;i<26;i++)  
  22.         if(cnt1[i]!=cnt2[i])  
  23.         {  
  24.             flag=1;//如果有不相等的  
  25.             break;  
  26.         }  
  27.         if(flag)  
  28.             printf("NO\n");  
  29.         else  
  30.             printf("YES\n");  
  31.     }  
  32.     return 0;  
  33. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值