1 条题解

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

    📝 题目大意

    给定一个仅包含大小写英文字母的字符串 SS,其中恰好有一个大写字母,其余均为小写字母。要求输出该大写字母在 SS 中的位置(从 11 开始计数)。

    💡 解题思路

    1. 题目分析:字符串长度 S100|S| \le 100,数据量极小。题目保证恰好有一个大写字母,因此只需找到第一个(也是唯一的)大写字母即可。
    2. 算法推导:遍历字符串的每个字符,使用 isupper() 函数判断是否为大写字母。找到后直接输出其下标 i+1(因为题目要求 11-based 索引),并立即 return 0 结束程序。由于题目保证恰好有一个大写字母,无需处理找不到的情况。
    3. 边界与细节:大写字母可能出现在字符串的任意位置(开头、中间、末尾),isupper() 是 C++ 标准库 <cctype> 提供的函数,能正确处理所有英文字母。

    ⏱️ 复杂度分析

    • 时间复杂度O(N)O(N),其中 N=S100N = |S| \le 100,最坏情况下遍历整个字符串。
    • 空间复杂度O(N)O(N),仅用于存储输入字符串。

    💻 标准代码 (C++)

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        string s;
        cin >> s;
        // 遍历字符串,找到唯一的大写字母
        for (int i = 0; i < s.size(); i++) {
            if (isupper(s[i])) {          // isupper() 判断是否为大写字母
                cout << i + 1 << endl;    // 输出 1-based 位置
                return 0;                 // 找到后直接结束
            }
        }
    }
    
    • 1

    信息

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