有两个长度相同的字符串,均由字母A-Z构成,长度不超过100。请判断是否可以把其中一个字符串的各个字母重排,然后对26个字母做一个一一映射,使得两个字符串相同。 如JWPUDJSTVP重排后可以得到WJDUPSJPVT,然后把每个字母映射到它前一个字母(B->A, C->B, ..., Z->Y, A->Z),得到VICTORIOUS。 输入 两个字符串,以空格分隔。 输出 若可以请输出YES,否则输出NO。 示例输入 ABBCFEA CCGGHJB 示例输出 YESC语言
时间: 2024-02-15 14:02:58 浏览: 203
以下是C语言的实现代码:
```c
#include <stdio.h>
#include <string.h>
int main()
{
char str1[101], str2[101];
int count1[26] = {0}, count2[26] = {0};
scanf("%s %s", str1, str2);
int len1 = strlen(str1), len2 = strlen(str2);
if (len1 != len2) {
printf("NO\n");
return 0;
}
for (int i = 0; i < len1; i++) {
count1[str1[i] - 'A']++;
count2[str2[i] - 'A']++;
}
for (int i = 0; i < 26; i++) {
if (count1[i] != count2[i]) {
printf("NO\n");
return 0;
}
}
printf("YES\n");
return 0;
}
```
思路解析:
首先判断两个字符串的长度是否相同,若不相同则一定无法通过重排和映射使得两个字符串相同,直接输出NO。
然后分别统计两个字符串中每个字母出现的次数,最后比较它们是否相同,若相同则输出YES,否则输出NO。
时间复杂度:$O(n)$,其中 $n$ 是字符串的长度。
阅读全文