【发布时间】:2021-07-12 00:30:43
【问题描述】:
当我在 LeetCode 中解决一个问题时,我发现了一些很奇怪的东西。
我有这条线,我认为它给了我一个超出时间限制的错误:
s.erase(i-k, k);
当我评论(//)这一行时,它没有显示时间超过错误,但奇怪的是,即使我没有评论它也从未执行过。
下面是整个代码。 Here 是问题链接。
class Solution {
public:
string removeDuplicates(string s, int k) {
char prev = s[0];
int cnt = 1;
cnt = 1;
for(int i = 1; i < s.size() + 1; i++){
if(s[i] == prev){
cnt++;
} else {
if(cnt == k){
// when input is "abcd" it never comes to this scope
// which is impossible to run erase function.
s.erase(i-k, k);
i = 0;
}
if(i >= s.size()) break;
cnt = 1;
prev = s[i];
}
}
return s;
}
};
当 Input 为 "abcd" 时,它甚至不会进入 'erase' 函数所在的 if 范围。 虽然 'erase' 函数从未运行过,但它仍然会影响时间复杂度,我不明白原因。
有人能解释一下吗?还是这只是 LeetCode 的问题?
【问题讨论】:
-
我不知道原因。 -- 你为什么认为你的程序是正确的,而失败的原因是“LeetCode”或其他什么?这看起来像是一个程序错误,您需要通过 using a debugger 解决,就像所有程序员在程序行为不正确时应该做的一样。
标签: c++ time-complexity std