【华为上机真题 2022】字符串分隔
创始人
2024-03-02 18:00:38
0

🎈 作者: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 
#include 
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<

在上述代码中,通过 getline 分割 ‘-’ 分割的字符串,然后根据 K 进行划分。函数 solve 处理大小写字母的转化。

四、时间复杂度

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

在上述代码中,需要先根据 ‘-’ 分割字符串,然后还需要遍历每个按照 K 新划分的字符串,根据新字符串中大小写字母的个数转化字符串。


🎈 感觉有帮助记得「一键三连支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞


相关内容

热门资讯

美国2年期国债收益率上涨15个... 原标题:美国2年期国债收益率上涨15个基点 美国2年期国债收益率上涨15个基...
汽车油箱结构是什么(汽车油箱结... 本篇文章极速百科给大家谈谈汽车油箱结构是什么,以及汽车油箱结构原理图解对应的知识点,希望对各位有所帮...
嵌入式 ADC使用手册完整版 ... 嵌入式 ADC使用手册完整版 (188977万字)💜&#...
重大消息战皇大厅开挂是真的吗... 您好:战皇大厅这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...
盘点十款牵手跑胡子为什么一直... 您好:牵手跑胡子这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游...
senator香烟多少一盒(s... 今天给各位分享senator香烟多少一盒的知识,其中也会对sevebstars香烟进行解释,如果能碰...
终于懂了新荣耀斗牛真的有挂吗... 您好:新荣耀斗牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信8435338】很多玩家在这款游戏...
盘点十款明星麻将到底有没有挂... 您好:明星麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【5848499】很多玩家在这款游戏...
总结文章“新道游棋牌有透视挂吗... 您好:新道游棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【7682267】很多玩家在这款游...
终于懂了手机麻将到底有没有挂... 您好:手机麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...