思路:

  1. 遍历每个测试案例:
  2. 判断字符串X和Y是否相等,如果相等则输出'YES',结束当前测试案例。
  3. 计算字符串X中A、B和C的个数分别为a、b和c。
  4. 如果a和b的和小于c,则输出'NO',结束当前测试案例。
  5. 如果a等于0且b等于0,则输出'NO',结束当前测试案例。
  6. 如果a等于0且b大于0,则判断是否存在AB的子串,如果存在则输出'YES',否则输出'NO',结束当前测试案例。
  7. 如果b等于0且a大于0,则判断是否存在BA的子串,如果存在则输出'YES',否则输出'NO',结束当前测试案例。
  8. 如果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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录