Chinaunix首页 | 论坛 | 博客
  • 博客访问: 343071
  • 博文数量: 122
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 1191
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-24 11:12
文章分类

全部博文(122)

文章存档

2010年(122)

我的朋友

分类: C/C++

2010-04-11 19:03:16

一、问题描述

原题见

大意是说给出两个相等长度的字符串,问可否通过置换加密和变换加密码将一个字符串变成另一个字符串。其中置换加密是把一个字符变成另一个字符,这个变换是一一对应的;变换加密是将字符串中各字符的位置打乱然后重新排列。

二、分析解答

    因为题目并没有给出具体的转换和变换方法,因此只有有一种方法可以就输出YES,因此只有从字符的出现次数来分析,将两个字符串中各字符出现次数分别统计出来,然后按从小到大进行排序,然后比较两个次数数组是否完全相等,完全相等输出YES,否则输出NO

三、代码

 

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
char a[105];
char b[105];
int fa[26];
int fb[26];
int main()
{
    int i;
    cin>>a;
    cin>>b;
    int len=strlen(a);
    memset(fa,0,sizeof(fa));
    memset(fb,0,sizeof(fb));
    for(i=0;i<len;++i)
    {
        fa[a[i]-65]++;
        fb[b[i]-65]++;
    }
    sort(fa,fa+26);
    sort(fb,fb+26);
    for(i=0;i<26;++i)
    {
        if(fa[i]!=fb[i])
        {
            cout<<"NO"<<endl;
            return 0;
        }        
    }
    cout<<"YES"<<endl;
    return 0;
}


阅读(743) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~