关注
想到两种最简单的方法: 一种是多遍扫,扫到满足条件的字符串为止,复杂度>O(n); 第二种扫一遍,做好充分的标记位,一位一位根据标记位来判断需不需要输出,及时更新标记位,复杂度O(n);代码如下: 测了一下(不知道对不对😂): aabbccddeeff -> aabccdeef aabccdddfff -> aabccddf abbbbbbbbbbbba -> abba aaabbcccee -> aabcce
#include <iostream>
#include <string>
using namespace std;
int main() {
int countOfString = 0;
cin >> countOfString;
while (countOfString--) {
string inputStr, outputStr = "";
cin >> inputStr;
if (inputStr.length() == 0) {
cout << "No String!" << endl;
return 0;
}
// firstRepeat是前面有重复的,secondRepeat是当前离自己最近的有无重复
int firstRepeat = 1, secondRepeat = 0;
// 输出串中默认放入第一个
outputStr.push_back(inputStr[0]);
// 从输入串中的第一个开始扫,扫一遍即可
for (int i = 1; i < inputStr.length(); i++) {
if (inputStr[i] != inputStr[i-1]) {
// 当前字符与前一个不同情况:
if (firstRepeat == 2) {
// 如果前面的字符已经重复了两次 如:aa
if (secondRepeat == 0) {
// 如果当前的字符还没出现过,当前字符数+1,如aab
secondRepeat ++;
}else {
// 否则,当前的字符作为‘前一个’,如aabc,初始化first和second
firstRepeat = 1;
secondRepeat = 0;
}
}
}else {
// 与前一字符相同的情况:
if (secondRepeat != 0) {
// 1. aabb
secondRepeat ++;
}else {
// 2. aaa
firstRepeat ++;
}
}
// 开始根据first和second给输出赋值
if (firstRepeat == 3) {
// aaa情况
firstRepeat --;
}else if (secondRepeat == 2) {
// aabb情况
firstRepeat = --secondRepeat;
secondRepeat = 0;
}else {
// 满足上述两种情况不输出,否则直接输出
outputStr.push_back(inputStr[i]);
}
}
// 输出
for (int i = 0; i < outputStr.length(); i++) {
cout << outputStr[i];
}
cout << endl;
}
return 0;
}
查看原帖
点赞 3
相关推荐
斫桂:问的都挺简单的
查看10道真题和解析 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 2025年终总结 #
123920次浏览 2080人参与
# 实习简历求拷打 #
16715次浏览 194人参与
# 作业帮求职进展汇总 #
84000次浏览 554人参与
# 秋招被挂春招仍然能投的公司 #
7815次浏览 108人参与
# 实习要如何选择和准备? #
128554次浏览 1486人参与
# 外包能不能当跳板? #
54291次浏览 256人参与
# 诺瓦星云求职进展汇总 #
233527次浏览 1736人参与
# mt对你说过最有启发的一句话 #
39072次浏览 454人参与
# 公司情报交流地 #
126698次浏览 1227人参与
# 为了找工作你花了哪些钱? #
74890次浏览 361人参与
# 你觉得机械有必要实习吗 #
69861次浏览 485人参与
# 投格力的你,拿到offer了吗? #
153446次浏览 822人参与
# 一起聊美团 #
307681次浏览 1767人参与
# 什么是优秀的实习经历 #
9417次浏览 226人参与
# 摸鱼被leader发现了怎么办 #
103911次浏览 659人参与
# 京东开奖 #
632094次浏览 3180人参与
# 秋招特别不鸣谢 #
16640次浏览 186人参与
# 考研失败就一定是坏事吗? #
202654次浏览 1389人参与
# 选实习,你更看重哪方面? #
15338次浏览 230人参与
# 安克创新求职进展汇总 #
62485次浏览 541人参与

