UVa 1339 古老的密码
2015-07-20 10:29
281 查看
题意:给定两个字符串,求解是否可以对每个字符建立一个映射使得s可以转化为t
先用桶来统计个数,
之后我们发现如果可行的话,那么一定是在统计值相同的两个字符建立映射
对于所有的字符均有这些情况
那么将桶排序后,两个桶的序列一定是一样的,数值一一对应
代码如下:
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
int cnt[30],bj[30];
char c[2][200];
int main(){
while(scanf("%s",c[0])==1){
scanf("%s",c[1]);
memset(cnt,0,sizeof(cnt));memset(bj,0,sizeof(bj));
int l0=strlen(c[0]),l1=strlen(c[1]);
for(int i=0;i<l0;++i){
cnt[c[0][i]-'A'+1]++;
}
for(int i=0;i<l1;++i){
bj[c[1][i]-'A'+1]++;
}
sort(cnt+1,cnt+26+1);sort(bj+1,bj+26+1);
bool flag=1;
for(int i=1;i<=26;++i){
if(cnt[i]!=bj[i]){
flag=0;break;
}
}
if(flag)printf("YES\n");
else printf("NO\n");
}
return 0;
}
先用桶来统计个数,
之后我们发现如果可行的话,那么一定是在统计值相同的两个字符建立映射
对于所有的字符均有这些情况
那么将桶排序后,两个桶的序列一定是一样的,数值一一对应
代码如下:
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
int cnt[30],bj[30];
char c[2][200];
int main(){
while(scanf("%s",c[0])==1){
scanf("%s",c[1]);
memset(cnt,0,sizeof(cnt));memset(bj,0,sizeof(bj));
int l0=strlen(c[0]),l1=strlen(c[1]);
for(int i=0;i<l0;++i){
cnt[c[0][i]-'A'+1]++;
}
for(int i=0;i<l1;++i){
bj[c[1][i]-'A'+1]++;
}
sort(cnt+1,cnt+26+1);sort(bj+1,bj+26+1);
bool flag=1;
for(int i=1;i<=26;++i){
if(cnt[i]!=bj[i]){
flag=0;break;
}
}
if(flag)printf("YES\n");
else printf("NO\n");
}
return 0;
}
相关文章推荐
- AngularJS学习笔记<1>环境配置
- UVA - 11419 SAM I AM
- [转]浅谈协方差矩阵
- android Shader绘图探究
- GCC "-fomit-frame-pointer"编译选项的含义
- php多条件查询
- 第一部分、十道海量数据处理面试题
- ACM我来了
- Eventlet Greenlet
- (转)第一部分、十道海量数据处理面试题
- 猫东formValidator对SELECT(单选)控件处理的bug
- 有关安卓的设计(持续更新)
- zTree -- jQuery 树插件 使用小结
- Maven笔记:
- cocos2d 3.X Shader 变暗和变灰
- env-update干了些什么
- Gentoo rc-update service ‘net.eth0′ does not exist
- iOS让按钮(UIbutton)文本左对齐
- intel edison 设置wifi自动连接
- HDU3420 Bus Fair