题目背景

对应的选择、判断题:试题 - GESP 202403 C++ 四级 - 洛谷有题

题目描述

对于两个字符串 A 和 B,如果 A 可以通过删除一个字符,插入一个字符,修改一个字符变成 B,那么我们说 A 和 B 是相似的。

比如 apple 可以通过插入一个字符变成 applee,可以通过删除一个字符变成 appe,也可以通过修改一个字符变成 bpple。因此 apple 和 applee、appe、bpple 都是相似的。但 applee 并不能 通过任意一个操作变成 bpple,因此它们并不相似。

特别地,两个完全相同的字符串也是相似的。

给定 T 组 A,B,请你分别判断它们是否相似。

输入格式

第一行一个正整数 T。
接下来 T 行,每行两个用空格隔开的字符串 A 和 B。

输出格式

对组 A,B,如果他们相似,输出 similar,否则输出 not similar

输入输出样例

输入 #1复制

5
apple applee
apple appe
apple bpple
applee bpple
apple apple

输出 #1复制

similar
similar
similar
not similar
similar

说明/提示

对全部的测试数据,保证 1≤T≤100,A 和 B 的长度不超过 50,仅含小写字母。

代码实现;

#include <iostream>
#include <string>
#include <cmath>
using namespace std;

bool check(string a, string b) {
    int la = a.size(), lb = b.size();
    if (abs(la - lb) > 1) return false;
    int i = 0, j = 0, cnt = 0;
    while (i < la && j < lb) {
        if (a[i] == b[j]) {
            i++; j++;
        } else {
            cnt++;
            if (la > lb) i++;
            else if (lb > la) j++;
            else { i++; j++; }
        }
    }
    cnt += la - i + lb - j;
    return cnt <= 1;
}

int main() {
    int t;
    cin >> t;
    while (t--) {
        string a, b;
        cin >> a >> b;
        if (check(a, b)) cout << "similar\n";
        else cout << "not similar\n";
    }
    return 0;
}

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐