鱼C论坛

 找回密码
 立即注册
查看: 3006|回复: 2

等价字符串

[复制链接]
发表于 2021-3-27 23:02:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
有两个长度相同的字符串,均由字母A-Z构成,长度不超过100。请判断是否可以把其中一个字符串的各个字母重排,然后对26个字母做一个一一映射,使得两个字符串相同。

如JWPUDJSTVP重排后可以得到WJDUPSJPVT,然后把每个字母映射到它前一个字母(B->A, C->B, ..., Z->Y, A->Z),得到VICTORIOUS。
输入
两个字符串,以空格分隔。
输出
若可以请输出YES,否则输出NO。
示例输入
ABBCFEA
CCGGHJB
示例输出
YES

我的错误程序:
#include <stdio.h>
#include <string.h>

int main() {
        char a[100], b[100];
        int t = 0;
        int p = 0;
        int m = 0;

        while (scanf("%c%c\n", a, b) == 2 && getchar() != '\n' ) {
                strlen(a) == strlen(b);
                int n = strlen(a);
                for (int i = 0; i < n; i++) {
                        int t = a[0];
                        if (a[i] < a[i + 1]) {
                                t = a[i];
                                a[i] = a[i + 1];
                                a[i + 1] = t;
                        }
                }
                for (int j = 0; j < n; j++) {
                        int p = b[0];
                        if (b[j] < b[j + 1]) {
                                p = b[j];
                                b[j] = b[j + 1];
                                b[j + 1] = p;
                        }
                }
                for (int i = 0, j = 0; i < n, j < n; i++, j++) {
                        if (a[0] > b[0]) {
                                if (a[i] == 'A')
                                        a[i] == 'Z';
                                else
                                        a[i] = a[i] - 1;
                                if (a[i] == b[j])
                                        m = 1;
                                else {
                                        m = 0;
                                        break;
                                }
                        } else if (b[j] == 'A')
                                b[j] == 'Z';
                        else
                                b[j] = b[j] - 1;
                        if (a[i] == b[j])
                                m = 1;
                        else {
                                m = 0;
                                break;
                        }
                }
                if (m = 1)
                        printf("YES\n");
                else
                        printf("NO\n");
        }
        return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-3-28 00:21:39 | 显示全部楼层
本帖最后由 yuxijian2020 于 2021-3-28 00:26 编辑

你这个示例输入和输出,我手算都算不出来YES....
  1. #include <stdio.h>

  2. #define bool    int
  3. #define true    1
  4. #define false   0

  5. bool EqualString(char a[100], char b[100])
  6. {
  7.     if (a[0] == 0 && b[0] == 0)
  8.         return true;
  9.     else if ((a[0] == 0 && b[0] != 0) || (a[0] != 0 && b[0] == 0) || strlen(a) != strlen(b))
  10.         return false;

  11.     char hash_a[26];
  12.     char hash_b[26];
  13.     bool isBreak = false;

  14.     memset(hash_a, 0, 26);
  15.     memset(hash_b, 0, 26);

  16.     for (int i = 0; i < 100; ++i)
  17.     {
  18.         char temp;

  19.         if (a[i] == 'A')
  20.             temp = 'Z';
  21.         else
  22.             temp = a[i] - 1;

  23.         hash_a[temp - 0x41]++;
  24.         hash_b[b[i] - 0x41]++;
  25.     }

  26.     for (int i = 0; i < 26; ++i)
  27.     {
  28.         if (hash_a[i] != hash_b[i])
  29.         {
  30.             isBreak = true;
  31.             break;
  32.         }
  33.     }

  34.     if (!isBreak)
  35.         return true;

  36.     memset(hash_a, 0, 26);
  37.     memset(hash_b, 0, 26);

  38.     for (int i = 0; i < 100; ++i)
  39.     {
  40.         char temp;

  41.         if (b[i] == 'A')
  42.             temp = 'Z';
  43.         else
  44.             temp = b[i] - 1;

  45.         hash_b[temp - 0x41]++;
  46.         hash_a[a[i] - 0x41]++;
  47.     }

  48.     for (int i = 0; i < 26; ++i)
  49.     {
  50.         if (hash_a[i] != hash_b[i])
  51.             return false;
  52.     }

  53.     return true;
  54. }

  55. int main()
  56. {
  57.     char a[100] = "WJDUPSJPVT";
  58.     char b[100] = "VICTORIOUS";

  59.     bool flag = EqualString(a, b);

  60.     if (flag)
  61.         printf_s("YES\n");
  62.     else
  63.         printf_s("NO\n");

  64.     return 0;
  65. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-28 00:30:31 | 显示全部楼层
贴个运行成功的图
2.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-3 12:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表