1 条题解

  • 0
    @ 2026-6-19 10:30:41

    📝 题目大意

    给定一个长度为 NN 的小写字母字符串 SS,判断是否存在相邻的两个字符恰好是 ab(顺序不限,即 abba 均可)。

    💡 解题思路

    1. 题目分析N100N \le 100,数据规模极小,直接暴力枚举即可。关键点是相邻字符对中 ab 的顺序可以是 ab 也可以是 ba
    2. 算法推导:遍历字符串 SS 的前 N1N-1 个位置,检查 SiS_iSi+1S_{i+1} 是否构成 abba。一旦找到,立即标记 found = true 并跳出循环;若遍历结束仍未找到,则输出 No
    3. 边界与细节N2N \ge 2,所以 N11N-1 \ge 1,循环至少执行一次,不会出现越界。注意判断条件中 || 两边的括号不可省略,否则运算符优先级会导致逻辑错误。

    ⏱️ 复杂度分析

    • 时间复杂度O(N)O(N),只需遍历字符串一次。
    • 空间复杂度O(1)O(1),仅使用常数个额外变量。

    💻 标准代码 (C++)

    #include <iostream>
    #include <string>
    using namespace std;
    int main() {
        int N;
        string S;
        cin >> N >> S;
        bool found = false;                     // 标记是否找到符合条件的相邻字符对
        for (int i = 0; i < N - 1; i++) {       // 遍历前 N-1 个位置,检查 S[i] 与 S[i+1]
            if ((S[i] == 'a' && S[i + 1] == 'b') || (S[i] == 'b' && S[i + 1] == 'a')) {
                found = true;                   // 找到 ab 或 ba,标记并退出
                break;
            }
        }
        cout << (found ? "Yes" : "No") << endl; // 根据标记输出结果
        return 0;
    }
    
    • 1

    信息

    ID
    746
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者