最小删除以在C ++中制作有效的括号
假设我们有一个字符串s'(',')'和小写英文字符。我们必须删除最小括号(在任何位置的'('或')'),以便得到的括号字符串有效并返回任何有效字符串。当满足所有这些条件时,括号字符串有效-
它是空字符串,仅包含小写字符,或者
它可以写为AB(A与B串联)的形式,其中A和B是有效字符串,或者
它可以以(A)的形式编写,其中A是有效字符串。
因此,如果输入类似于“ a)b(c)d”,那么输出将为“ ab(c)d”
为了解决这个问题,我们将遵循以下步骤-
定义一个堆栈st
对于范围从0到s的i
如果堆栈不为空,则从堆栈弹出,否则s [i] ='*'
如果s [i] ='(',则将i插入st
否则,当s [i]为')'时,
虽然st不为空,
s [堆栈的顶部元素] ='*'
从堆栈弹出
ans:=空字符串
当我的范围是0到s的大小– 1
如果s [i]不是'*',则ans:= ans + s [i]
返回ans
让我们看下面的实现以更好地理解-
示例
#include <bits/stdc++.h>using namespace std;
class Solution {
public:
string minRemoveToMakeValid(string s) {
stack <int> st;
for(int i = 0; i < s.size(); i++){
if(s[i] == '(')st.push(i);
else if(s[i] == ')'){
if(!st.empty())st.pop();
else s[i] = '*';
}
}
while(!st.empty()){
s[st.top()] = '*';
st.pop();
}
string ans = "";
for(int i = 0; i < s.size(); i++){
if(s[i] != '*')ans += s[i];
}
return ans;
}
};
main(){
Solution ob;
cout << (ob.minRemoveToMakeValid("a)b(c)d"));
}
输入值
"a)b(c)d"
输出结果
ab(c)d
以上是 最小删除以在C ++中制作有效的括号 的全部内容, 来源链接: utcz.com/z/316837.html