字符串转换问题:判断是否可以通过特定操作使两个字符串相等
思路:
- 遍历每个测试案例:
- 判断字符串X和Y是否相等,如果相等则输出'YES',结束当前测试案例。
- 计算字符串X中A、B和C的个数分别为a、b和c。
- 如果a和b的和小于c,则输出'NO',结束当前测试案例。
- 如果a等于0且b等于0,则输出'NO',结束当前测试案例。
- 如果a等于0且b大于0,则判断是否存在AB的子串,如果存在则输出'YES',否则输出'NO',结束当前测试案例。
- 如果b等于0且a大于0,则判断是否存在BA的子串,如果存在则输出'YES',否则输出'NO',结束当前测试案例。
- 如果a和b都大于0,则判断是否存在AB或BA的子串,如果存在则输出'YES',否则输出'NO',结束当前测试案例。
C++代码:
#include <iostream>
#include <string>
using namespace std;
int main() {
int T;
cin >> T;
while (T--) {
string X, Y;
cin >> X >> Y;
if (X == Y) {
cout << "YES" << endl;
continue;
}
int a = 0, b = 0, c = 0;
for (int i = 0; i < X.length(); i++) {
if (X[i] == 'A') a++;
else if (X[i] == 'B') b++;
else if (X[i] == 'C') c++;
}
if (a + b < c) {
cout << "NO" << endl;
continue;
}
if (a == 0 && b == 0) {
cout << "NO" << endl;
continue;
}
if (a == 0 && b > 0) {
if (X.find("AB") != string::npos) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
continue;
}
if (b == 0 && a > 0) {
if (X.find("BA") != string::npos) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
continue;
}
if (X.find("AB") != string::npos || X.find("BA") != string::npos) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
return 0;
}
原文地址: https://www.cveoy.top/t/topic/pauh 著作权归作者所有。请勿转载和采集!