关注
想到两种最简单的方法: 一种是多遍扫,扫到满足条件的字符串为止,复杂度>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
相关推荐
牛客热帖
更多
正在热议
更多
# 26届的你,投了哪些公司? #
4646次浏览 80人参与
# 我对___祛魅了 #
11694次浏览 115人参与
# 中兴秋招 #
185028次浏览 2049人参与
# 如何快速融入团队? #
4076次浏览 66人参与
# 你跟室友的关系怎么样? #
945次浏览 30人参与
# 和同事相处最忌讳的是__ #
6366次浏览 76人参与
# 你遇到最难的面试题目是_ #
1745次浏览 46人参与
# 简历上的经历如何包装 #
4613次浏览 128人参与
# 什么样的背景能拿SSP? #
7651次浏览 77人参与
# 我和mentor的爱恨情仇 #
60760次浏览 368人参与
# 打工人的精神状态 #
64431次浏览 1072人参与
# 工作中哪个瞬间让你想离职 #
36388次浏览 278人参与
# 元戎启行求职进展汇总 #
35062次浏览 263人参与
# 你最讨厌面试问你什么? #
4137次浏览 88人参与
# 工作中的卑微时刻 #
20204次浏览 165人参与
# 职场人,说说你的烦心事 #
13022次浏览 109人参与
# 职场常用语录大全 #
5523次浏览 41人参与
# 一人推荐一个机械人值得去的公司 #
413761次浏览 4157人参与
# 毕业季,给职场新人一些建议 #
97752次浏览 1769人参与
# 机械人,秋招第一次笔试的企业是哪家? #
42692次浏览 337人参与
# 哪些公司校招卡第一学历 #
88138次浏览 380人参与