【发布时间】:2021-05-07 00:31:55
【问题描述】:
我正在解决https://leetcode.com/problems/minimum-remove-to-make-valid-parentheses/
说明:给定一个由 '(' , ')' 和小写英文字符组成的字符串 s。
您的任务是删除最少数量的括号('(' 或 ')',在任何位置),以便生成的括号字符串有效并返回任何有效字符串。
我尝试实现一个 O(1) 空间解决方案,即
string minRemoveToMakeValid(string s) {
string ans;
string fa;
int l=0;
for(char c:s){
if(c=='(') l++;
else if(c==')'){
if(l==0) continue;
l--;
}
ans = ans + c;
}
for(int i=ans.size()-1;i>=0;i--){
if(ans[i]=='(' && l>0){
l--;
continue;
}
fa = fa + ans[i];
}
reverse(fa.begin(),fa.end());
return fa;
}
但它会抛出 Time Limit Exceeded。
类似的代码正在运行并被接受,并且没有抛出 TLE,我无法理解导致这种情况的差异
string minRemoveToMakeValid(string s) {
int open=0;
string t;
for(int i=0;i<s.size();i++)
{
if(s[i]=='(')open++;
else if(s[i]==')')
{
if(open==0)continue;
open--;
}
t+=s[i];
}
string ans;
for(int i=t.size()-1;i>=0;i--)
{
if(t[i]=='(' && open>0)
{
open--;
continue;
}
ans+=t[i];
}
reverse(ans.begin(),ans.end());
return ans;
}
请帮助我理解并感谢您的帮助。
【问题讨论】:
-
顺便说一句,这不是
O(1)空间解决方案 -
这使得推理变得更加困难,因为这两个版本都有极其难以描述的变量名称,唯一的共同变量是
ans,它在不同版本中用于不同的事情。 -
是的,它奏效了。我现在将尝试找出为什么 += 比我使用的那个更好。 @Bathsheba