样例过了,但是提交上去一个没过
求大佬帮忙解答一下
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
//输入数据
int t;
cin >> t;
/*
各组数据计算结果
1:相似
0:不相似
*/
int out[t] = {0};
for (int i = 0; i < t; i++) {
string a, b;
cin >> a >> b;
//判断两个字符串是不是直接相同
if (a == b) {
out[i] = 1;
}
//如果a比b短
else if (a.size() < b.size()) {
//则如果a比b短了超过一个字符就失败
if (b.size() - a.size() > 1) {
out[i] = 0;
}
//如果a只是比b少了一个字符
else {
bool fail = true;
//则循环找出
for (int j = 0; j < b.size(); j++) {
string temp = b;
temp.erase(j, 1);
if (temp == a) {
out[i] = 1;
fail = false;
}
}
//如果无法匹配,那么失败
if (fail) {
out[i] = 0;
}
}
}
//22-46,但是a和b反过来
else if (b.size() < a.size()) {
if (a.size() - b.size() > 1) {
out[i] = 0;
}
else {
bool fail = true;
for (int j = 0; j < b.size(); j++) {
string temp = a;
temp.erase(j, 1);
if (temp == b) {
out[i] = 1;
fail = false;
}
}
if (fail) {
out[i] = 0;
}
}
}
//如果ab一样长
else {
int nsim = 0;
//循环找不同
for (int j = 0; j < a.size(); j++) {
if (a[j] != b[j]) {
nsim++;
}
}
//如果只有一个不同,那么判定相似
if (nsim == 1) {
out[i] = 1;
}
//否则不相似
else {
out[i] = 0;
}
}
}
//输出
for (int i = 0; i < t; i++) {
if (out[i] == 1) {
cout << "similar" << endl;
}
else {
cout << "not similar" << endl;
}
}
return 0;
}