鱼C论坛

 找回密码
 立即注册
查看: 2650|回复: 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

#define bool    int
#define true    1
#define false   0

bool EqualString(char a[100], char b[100])
{
    if (a[0] == 0 && b[0] == 0)
        return true;
    else if ((a[0] == 0 && b[0] != 0) || (a[0] != 0 && b[0] == 0) || strlen(a) != strlen(b))
        return false;

    char hash_a[26];
    char hash_b[26];
    bool isBreak = false;

    memset(hash_a, 0, 26);
    memset(hash_b, 0, 26);

    for (int i = 0; i < 100; ++i)
    {
        char temp;

        if (a[i] == 'A')
            temp = 'Z';
        else
            temp = a[i] - 1;

        hash_a[temp - 0x41]++;
        hash_b[b[i] - 0x41]++;
    }

    for (int i = 0; i < 26; ++i)
    {
        if (hash_a[i] != hash_b[i])
        {
            isBreak = true;
            break;
        }
    }

    if (!isBreak)
        return true;

    memset(hash_a, 0, 26);
    memset(hash_b, 0, 26);

    for (int i = 0; i < 100; ++i)
    {
        char temp;

        if (b[i] == 'A')
            temp = 'Z';
        else
            temp = b[i] - 1;

        hash_b[temp - 0x41]++;
        hash_a[a[i] - 0x41]++;
    }

    for (int i = 0; i < 26; ++i)
    {
        if (hash_a[i] != hash_b[i])
            return false;
    }

    return true;
}

int main()
{
    char a[100] = "WJDUPSJPVT";
    char b[100] = "VICTORIOUS";

    bool flag = EqualString(a, b);

    if (flag)
        printf_s("YES\n");
    else
        printf_s("NO\n");

    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-28 00:30:31 | 显示全部楼层
贴个运行成功的图
2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 17:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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