UVa 1339

来源:互联网 发布:java 获取当前时间 编辑:程序博客网 时间:2024/04/29 15:53

题目

给定两个长度一样且不超过100的字符串,判断是否能把其中一个字符串的各个字母重排,之后对26个字母做一个一一映射,使得两个字符串相同。
例如,JWPUDJSTVP重排后可以得到WJDUPSJPVT,之后把每个字母映射到它的前面一个字母,得到VICTORIOUS,输入两个字符串,输出YES或者NO。

代码

 #include<algorithm> #include<cstring> using namespace std; bool cmp(const int a,const int b) {    return a<b; } int main() {    string fst;    string sec;    while(cin >> fst >> sec)    {        int a = fst.length();        int array[26];        int array1[26];        memset(array,0,sizeof(array));        memset(array1,0,sizeof(array1));        for(int i = 0;i < a;i++)        {            array[fst[i] - 'A']++;            array1[sec[i] - 'A']++;         }        sort(array,array+26,cmp);        sort(array1,array1+26,cmp);//cmp函数作为sort函数的参数        int x = 5;        for(int i = 0;i < 26;i++)        {             if(array[i] != array1[i])             {                 x = 0;             }        }        if(x == 0)        cout << "NO" << endl;        else        cout << "YES" << endl;     } }

理解

这个题是书上的第一题,为了讲“把函数作为函数的参数”,所以主要考查的是排序,然而脑子笨的我卡在了映射上。。。。这个给定的两个字符串,打乱顺序,在影射,实际上就是只要两组里对应的字母数相同就可以,所以就直接统计不同的字母有多少个,然后每个字母出现了多少次就可以了。。。

0 0
原创粉丝点击