1 条题解
-
0
📝 题目大意
给定一个长度为奇数的字符串 (仅含大小写英文字母),统计其中大写字母和小写字母的个数。若大写字母更多,则将整个字符串转为大写;否则转为小写。输出转换后的字符串。
💡 解题思路
-
题目分析:题目保证 的长度为奇数(),因此大写字母和小写字母的个数不可能相等,必然存在严格的大小关系。这意味着我们不需要处理"相等"的边界情况,只需比较大小即可。
-
算法推导:遍历字符串 ,用
isupper(c)判断每个字符是否为大写,分别统计大写字母个数upper和小写字母个数lower。比较upper与lower:若upper > lower,则用toupper(c)将整个字符串逐字符转为大写;否则,用tolower(c)将整个字符串逐字符转为小写。最后直接输出。 -
边界与细节:由于长度保证为奇数,不存在
upper == lower的情况,无需额外判断。使用 C++ 的<cctype>中的isupper、toupper、tolower函数可简洁处理大小写判断与转换,注意这些函数对非字母字符的行为,但本题保证只含字母,无需担心。
⏱️ 复杂度分析
- 时间复杂度:,其中 。第一遍遍历统计大小写个数,第二遍遍历进行转换,总共两次线性扫描。
- 空间复杂度:,存储输入字符串 。
💻 标准代码 (C++)
#include <iostream> #include <string> #include <cctype> using namespace std; int main() { string S; cin >> S; // 统计大写字母和小写字母的个数 int upper = 0, lower = 0; for (char c : S) { if (isupper(c)) upper++; else lower++; } // 根据大小写个数决定转换方向 if (upper > lower) { // 大写字母更多,全部转为大写 for (char &c : S) c = toupper(c); } else { // 否则全部转为小写 for (char &c : S) c = tolower(c); } cout << S << endl; return 0; } -
- 1
信息
- ID
- 804
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者