🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
目录
一、题目描述
1.1 输入描述
1.2 输出描述
1.3 测试样例
1.3.1 示例1
1.3.2 示例 2
二、解题思路
三、代码实现
四、时间复杂度
注意:题目来源于网络用户分享,本文仅分享做题思路和方法,如有侵权请联系我删除!
一、题目描述
给定一个非空字符串 S,其被 N 个 ‘-’ 分隔成 N+1 的子串,给定正整数 K,要求除第一个子串外,其余的子串每 K 个字符组成新的子串,并用 ‘-’ 分隔。
对于新组成的每一个子串:
(1)如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;
(2)反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;
(3)大小写字母的数量相等时,不做转换。
1.1 输入描述
输入为两行,第一行为参数 K,第二行为字符串 S。
1.2 输出描述
输出转换后的字符串。
1.3 测试样例
1.3.1 示例1
输入
3
12abc-abCABc-4aB@
输出
12abc-abc-ABC-4aB-@
说明:子串为 12abc、abCABc、4aB@,第一个子串保留,后面的子串每 3 个字符一组为 abC、ABc、4aB、@,abC 中小写字母较多,转换为 abc,ABc 中大写字母较多,转换为ABC,4aB中大小写字母都为 1 个,不做转换,@中没有字母,连起来即12abc-abc-ABC-4aB-@
1.3.2 示例 2
输入
12
12abc-abCABc-4aB@
输出
12abc-abCABc4aB@
说明:子串为 12abc、abCABc、4aB@,第一个子串保留,后面的子串每 12 个字符一组为 abCABc4aB@,这个子串中大小写字母都为 4 个,不做转换,连起来即 12abc-abCABc4aB@
二、解题思路
本题是一个模拟题,提取通过 ‘-’ 分隔的字符串,以输入的 K 长度为分隔重新划分,但是,新划分的字符串需要判断大小写字母的个数,并根据大小写字母个数对字符串进行转化。
三、代码实现
代码实现如下所示。
#include <iostream>
#include <sstream>
using namespace std;
//处理大小写字母的转化
string solve(string str)
{
int n = str.size();
int num1 = 0, num2 = 0;
for (int i = 0; i < n; ++i) {
if (islower(str[i])) {
num1++;
}
if (isupper(str[i])) {
num2++;
}
}
if (num1 > num2) {
for (int i = 0; i < n; ++i) {
if (isupper(str[i])) {
str[i] = tolower(str[i]);
}
}
}
if (num1 < num2) {
for (int i = 0; i < n; ++i) {
if (islower(str[i])) {
str[i] = toupper(str[i]);
}
}
}
return str;
}
int main()
{
int K;
while (cin>>K) {
getchar();
string str;
getline(cin, str);
stringstream stream(str);
bool flag = true;
string ans;
string preStr = "";
while (getline(stream, str, '-')) {
if (flag) { // 第 1 个不处理
ans += str;
flag = false;
continue;
}
str = preStr + str;
if ((int)str.size() >= K) {
while ((int)str.size() >= K) {
ans += '-' + solve(str.substr(0, K));
str = str.substr(K);
}
}
preStr = str;
}
if (preStr.size()) {
ans += '-' + preStr;
}
cout<<ans<<endl;
}
return 0;
}
在上述代码中,通过 getline 分割 ‘-’ 分割的字符串,然后根据 K 进行划分。函数 solve 处理大小写字母的转化。
四、时间复杂度
时间复杂度:O(n^2)
在上述代码中,需要先根据 ‘-’ 分割字符串,然后还需要遍历每个按照 K 新划分的字符串,根据新字符串中大小写字母的个数转化字符串。
🎈 感觉有帮助记得「一键三连」支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章」回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞