你有一个仅包含左括号'('和右括号')'的字符串,但其中的括号并不配对.为了使这个字符串变得更好看,你希望在字符串中插入尽可能少的括号(可以在任意位置插入任意数量的左括号或右括号,但已有的括号不能改变),使修改后的字符串括号配对.输出一行,为插入圆括号后配对的字符串.如有多种长度最短的方案,输出任意个即可.c++代码
时间: 2024-02-15 15:03:20 浏览: 56
C++ 括号匹配问题
5星 · 资源好评率100%
以下是一个简单的 C++ 实现,使用栈来实现括号匹配,同时记录需要插入的左括号和右括号的数量,最后将它们插入到合适的位置:
```c++
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;
stack<int> st; // 存储左括号的下标
int left = 0, right = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '(') {
st.push(i);
} else if (s[i] == ')') {
if (!st.empty()) {
st.pop();
} else {
right++; // 需要插入右括号
}
}
}
left = st.size(); // 需要插入左括号的数量
string res = "";
for (int i = 0; i < s.size(); i++) {
if (s[i] == '(' || s[i] == ')') {
res += s[i];
}
if (i == s.size() - 1 && right > 0) {
while (right--) {
res += ')';
}
}
if (!st.empty() && st.top() == i && left > 0) {
while (left--) {
res = '(' + res;
}
st.pop();
}
}
cout << res << endl;
return 0;
}
```
阅读全文