1 条题解

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

    📝 题目大意

    给定一个由小写英文字母组成的字符串 SS,找出字符 a 最后一次出现的位置(从 11 开始编号)。若 a 不存在,则输出 1-1

    💡 解题思路

    1. 题目分析S100|S| \leq 100,数据量极小,直接 O(n)O(n) 遍历即可。核心是找"最后一次出现的位置",等价于从右向左找到第一个 a 的位置。
    2. 算法推导
      • 使用 C++ 标准库函数 s.rfind('a'),它从字符串末尾向前搜索,返回 a 最后一次出现的下标(00-indexed)。
      • pos == string::npos,说明 a 不存在,输出 1-1
      • 否则,将下标 +1+1 转换为 11-indexed 输出。
    3. 边界与细节
      • 字符串长度至少为 11,不会出现空串。
      • a 出现多次时(如样例 aaaaa),rfind 天然返回最后一个位置,无需额外处理。
      • 注意返回值转型:rfind 返回 size_t(无符号),与 string::npos 比较后再做 +1 运算,避免无符号溢出。

    ⏱️ 复杂度分析

    • 时间复杂度O(n)O(n),其中 n=Sn = |S|
    • 空间复杂度O(1)O(1),仅需存储字符串本身。

    💻 标准代码 (C++)

    #include<bits/stdc++.h>
    using namespace std;
    int main() {
        string s;
        cin >> s;
        // 从右向左查找字符 'a' 的最后一次出现位置(0-indexed)
        int pos = s.rfind('a');
        // 若未找到,输出 -1;否则输出下标 +1(转为 1-indexed)
        cout << (pos == string::npos ? -1 : pos + 1) << endl;
        return 0;
    }
    
    • 1

    信息

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