首页 > 学院 > 开发设计 > 正文

UVa 1339

2019-11-08 00:44:12
字体:
来源:转载
供稿:网友

题目

给定两个长度一样且不超过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; } }

理解

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表