《B3958 [GESP202403 四级] 相似字符串》
·
题目背景
对应的选择、判断题:试题 - 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;
}
更多推荐
所有评论(0)