原题
小码哥是一名黑客,他最近刚彩票中奖,由于还没兑换,小码哥十分担心彩票被盗(小码哥过分谨慎了),他想为自己的保险箱设新的密码,顺便他想让你测试编码。
现有两种编码方式:
- 对于已知字符串中的某种字符,全部变成另一种字符。如里面出现的A全部换成B;
- 对于当前字符串,打乱字符顺序。
先给你一个加密后的字符串和加密前的字符串,判断加密前的字符串是否能得到加密后的字符串。字符串中字符均为大写字母。
格式
输入格式:
第一行加密后的字符串;
第二行加密前的字符串;
有多组数据输入。
输出格式:
输出“YES”或“No”。
样例
输入:
JWPUDJSTVP VICTORIOUS MAMA ROME HAHA HEHE AAA AAA NEERCISTHEBEST SECRETMESSAGES输出:
YES NO YES YES NO
备注
所有字符串长度不超过100。
代码
/**
输入格式:
第一行加密后的字符串;
第二行加密前的字符串;
有多组数据输入。
输出格式:输出YES或NO。
样例1 输入:JWPUDJSTVP
VICTORIOUS
MAMA
ROME
HAHA
HEHE
AAA
AAA
NEERCISTHEBEST
SECRETMESSAGES
输出:YES
NO
YES
YES
NO
备注
所有字符串长度不超过100。
*/
#include <bits/stdc++.h>
using namespace std;
const int LL = 26;
//int cont1[LL], cont2[LL]; 这个不能放在全局变量啊!每次都要调用函数,所以不能放在全局变量上
bool judge(string str1, string str2)
{
if (str1.size() != str2.size())
{
return false;
}
int cont1[LL]={0}, cont2[LL]{0};
for (int i = 0; i < str1.length(); i++)
{
cont1[str1[i] - 'A']++;
cont2[str2[i] - 'A']++;
}
sort(cont1, cont1 + LL);
sort(cont2, cont2 + LL);
for (int i = 0; i < LL; i++)
{
if (cont1[i]!= cont2[i])
return false;
}
return true;
}
int main()
{
string str1, str2;
while (cin >> str1 >> str2)
{
if (judge(str1, str2))
{
cout << "YES"<<endl;
}
else cout << "NO"<<endl;
}
return 0;
}
反思
刚开始的时候把cont1和cont2都写到全局中去了,然而每次调用函数都要用到这两个计数器,自然要放在函数体中定义!下次注意。