您的位置:首页 > 其它

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: