1 条题解

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

    📝 题目大意

    给定一个只包含大小写英文字母的字符串 SS,判断其首字母是否为大写,且其余所有字母是否均为小写。

    💡 解题思路

    1. 题目分析:字符串长度 S100|S| \le 100,数据量极小,直接模拟即可。关键在于正确理解"首字母大写 + 其余全小写"这一条件——当 S=1|S| = 1 时,只需判断首字母是否大写即可(不存在"其余字母")。
    2. 算法推导
      • isupper(S[0]) 检查首字母是否为大写,若不是则直接判定为 No
      • 遍历下标 ii11S1|S|-1,用 islower(S[i]) 检查每个字符是否为小写,一旦发现非小写字符,立即标记 ok = falsebreak 跳出循环。
      • 最后根据 ok 的值输出 "Yes""No"
    3. 边界与细节
      • 长度为 11 时,循环体不会执行,此时只需首字母大写即为 Yes(样例 4:"A"Yes)。
      • 使用 <cctype> 中的 isupper / islower 可避免手动判断 ASCII 范围,代码更简洁安全。
      • 注意 isupperislower 对非字母字符的行为,但本题保证输入全为英文字母,无需额外处理。

    ⏱️ 复杂度分析

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

    💻 标准代码 (C++)

    #include <iostream>
    #include <string>
    #include <cctype>
    using namespace std;
    int main() {
        string S;
        cin >> S;
        bool ok = true;
        // 检查首字母是否为大写
        if (!isupper(S[0])) {
            ok = false;
        }
        // 检查其余字母是否均为小写
        for (size_t i = 1; i < S.size(); i++) {
            if (!islower(S[i])) {
                ok = false;
                break;  // 一旦发现非小写,提前退出
            }
        }
        // 输出结果
        if (ok) {
            cout << "Yes" << endl;
        } else {
            cout << "No" << endl;
        }
        return 0;
    }
    
    • 1

    信息

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