来自VJ的地址:https://vjudge.net/problem/UVA-1339
题意:
不是很容易理解。
两个字符串,对其中的一个进行操作,可以将它任意排列,然后将所有相同的字符随意映射成其它另一种字符,问是否能和另一个字符串相同。
解析:
随意排列,所以这个不用管。
要想相同,必须保证操作串的每一个字符的数量都能在另一个串中找到。
所以记录每个字符的出现次数,sort一下,然后比较即可。
#include<iostream> #include<cstdio> #include<vector> #include<cstring> #include<algorithm> using namespace std; int n1[27],n2[27]; int main() { string s1,s2; while(cin>>s1>>s2) { memset(n1,0,sizeof(n1)); memset(n2,0,sizeof(n2)); for(int i=0;i<s1.length();i++) { n1[s1[i]-65]++; n2[s2[i]-65]++; } sort(n1,n1+26); sort(n2,n2+26); int ok = 0 ; for(int i=0;i<26;i++) { if(n1[i]!=n2[i]) { ok=1;break; } } if(ok) cout<<"NO"<<endl; else cout<<"YES"<<endl; } }