Skip to content

13009: 【原3009】Believe or not

题目

题目描述

author: pigoneand 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/3009

Description

一天,特工二哥(Agent Two),代号002,正在执行一项绝密任务,破解X国高性能计算中心的登陆密码——密码为一个只有a-z构成的字符串。由于登陆中心的设置,二哥只能尝试输入一次密码。二哥经过几十天的奋战,终于猜测出了登陆密码。 X国登陆中心有个奇怪的设置,假设其设置的密码为X,二哥猜测的密码为Y。如果X和Y是完全相同的字符串,那么登陆成功,如果Y能够通过交换任意两个字符的位置(只能交换一次)得到X,那么也认为登陆成功。否则,则认为登陆失败。 二哥认为他能够登陆成功,你信吗?至于你信不信,二哥信了。

Input Format

输入两行,分别代表X和Y,X和Y长度相等。

第一行一个字符串X

第二行一个字符串Y

Output Format

输出仅有一行 YES 或者 NO YES表示你相信二哥能够登陆成功。 NO表示你不相信

Sample Input

ab
ba

Sample Output

YES

Sample Input

abcde
abcde

Sample Output

YES

Sample Input

abcd
dcba

Sample Output

NO

Hint

对全部的数据, 字符串长度<=1000

yyong119's solution

#include <iostream>
#include <cstring>
#define MAX_LEN 1010
using namespace std;
char a[MAX_LEN], b[MAX_LEN];
int diff[MAX_LEN];
int main() {
    cin >> a >> b;
    int cnt = 0;
    for (register int i = 0; i < strlen(a); ++i)
        if (a[i] != b[i])
            diff[cnt++] = i;
    if (!cnt || cnt == 2 && a[diff[0]] == b[diff[1]] && a[diff[1]] == b[diff[0]])
        cout << "YES";
    else
        cout << "NO";
    return 0;
}