题目大意:
给2个字符串,求是否为经过加密的密码。
(后面是字符串是否为前面字符串的加密结果)
解题思路:
加密过程只有两种:
- 全部字符进行平移
- 将字符的位置进行替换
因此:只要判断字符的数量与之前的数量是否相符就行
(相符不要求相应的字母相同,而是要求个数相同就行)
eg:
原本有A 2个,B 2 个, C 1个
加密后 D 2个 E 2个,F 1个。
(数量相对应)
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
int ans[35];
int res[35];
int main(){
string A;
string B;
cin>>A;
cin>>B;
for (int i = 0 ; i < A.length();i++){
ans[A[i]- 'A'] ++;
}
for (int j = 0; j < B.length();j++){
res[B[j]-'A']++;
}
sort(ans,ans+26);
sort(res,res+26);
if (A.length() != B.length()){
printf("NO\n");
return 0;
}
else{
int k = 1;
for (int i = 0 ;i < 26;i++){
if (ans[i]!=res[i]){
k = 0;
break;
}
}
if (k){
printf("YES\n");
}
else{
printf("NO\n");
}
}
}