我写了一个解决方案,用于从字符串中删除3个(让我们称之为k)或更多连续的相同字符。 例如。
SELECT Class_02, ItemCode FROM Items
代码:
in: daabbcccbbaad out: dd
in: aaabbb out:
in: aaabbbc out: c
对于每次比赛void removeDup(string& s, int start) {
if (s.length() < 3) {
return;
}
if (start > s.length() - 2) return;
int count = 1;
char c = s[start];
int i = start + 1;
while (i < s.length() && s[i] == c) {
++count, ++i;
}
if (count >= 3) {
start = i - count - 2;
if (start < 0) start = 0;
s.erase(i - count, count);
} else {
start = i;
}
return removeDup(s, start);
}
,指针将向后移动2步。此外,由于没有匹配的字符,问题的大小也在减少。
我想了解如何对此进行复杂性分析。同样对于任何start
(例如k
)来说,复杂度如何变化。
ps:如果您有一个更好的解决方案,请保持不变的空间。