描述

题目描述

首先给定了我们的一个字符串, 里面可能含有空格, 问我们这个字符串的里面多有少个大写的字母

题解

解法一: 正常的模拟

实现思路

我们可以手动一个个的模拟来判断是否是大写字母如果是的话, 答案加一

图解代码

20220309063528

20220309063546

20220309063556

20220309063607

20220309063620

代码实现

#include <bits/stdc++.h>

using namespace std;

signed main() {
    string s;
    while (getline(cin, s)) {
        int res = 0;
        for (auto &it : s) 
            if (isupper(it)) res += 1;
        // 遍历我们的字符串, 如果我们的这个字符串当前的这位字符是大写字母, 我们把答案加一
        cout << res << "\n";
        // 输出我们的答案
    }
    return 0;
}

时空复杂度分析

时间复杂度: O(n)O(n)

理由如下: 我们遍历了一次我们的字符串

空间复杂度: O(1)O(1)

理由如下: 我们只是引入了常数级别的空间

解法二: lambda表达式

实现思路

我们可以使用C++C++中的对于STLSTL的一个库函数countifcount_if, 我们可以用lambdalambda写一个表达式来用于传入我们的countifcount_if里面, 用于统计我们有多少个大写字母

代码实现

#include <bits/stdc++.h>

using namespace std;

signed main() {
    string s;
    while (getline(cin, s)) {
        cout << count_if(s.begin(), s.end(), [&](const auto &c) -> bool {
            return isupper(c);
        }) << "\n";
        // 这个是用于返回区间内满足条件的个数的
    }
    return 0;
}

时空复杂度分析

时间复杂度: O(n)O(n)

理由如下: 我们遍历了一次我们的字符串

空间复杂度: O(1)O(1)

理由如下: 我们只是引入了常数级别的空间