题意与原解析均从本地 OpenJudge 缓存迁移。
OJ: noi_openjudge
题目 ID: ch0113-51
难度:未知
标签:字符串计数python
日期: 2026-07-30 23:01
题意
完整题面见同目录的 problem.md。
思路
代码
Python代码
python
encrypted = input().strip()
original = input().strip()
if len(encrypted) == len(original) and sorted(
encrypted.count(character) for character in set(encrypted)
) == sorted(original.count(character) for character in set(original)):
print("YES")
else:
print("NO")C++代码
cpp
#include <cstdio>
#include <cstring>
#include <algorithm>
char str1[110];
int str1_cnt[30];
char str2[110];
int str2_cnt[30];
void cnt(char a[],int b[],int len){
int i;
for(i=0;i<len;i++)
b[ a[i]-'A']++;
std::sort(b,b+26);
}
bool judge(){
int i;
for(i=0;i<26;i++)
if( str1_cnt[i] != str2_cnt[i])
return false;
return true;
}
int main(){
scanf("%s%s",str2,str1); // %s 会略过空格 换行符\n 等不可见的字符,所以不用"%s\n%s"这样写
memset(str1_cnt,0,sizeof(str1_cnt));
memset(str2_cnt,0,sizeof(str2_cnt));
int len_str1 = strlen(str1);
int len_str2 = strlen(str2);
if( len_str1 != len_str2){
printf("NO");
return 0;
}
//统计字符
cnt(str1,str1_cnt,len_str1);
cnt(str2,str2_cnt,len_str2);
if( judge()){
printf("YES");
return 0;
}
//加密1
int i,j;
//多次加密
for(j=1;j<=26;j++){
for(i=0;i<len_str1;i++){
if(str1[i] == 'Z')
str1[i] ='A';
else
str1[i]++;
}
memset(str1_cnt,0,sizeof(str1_cnt));
memset(str2_cnt,0,sizeof(str2_cnt));
cnt(str1,str1_cnt,len_str1);
cnt(str2,str2_cnt,len_str2);
if( judge()){
printf("YES");
return 0;
}
}
printf("NO");
return 0;
}