题目描述
给出一个字符串 s
(仅含有小写英文字母和括号)。
请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。
注意,您的结果中 不应 包含任何括号。
示例 1:
输入:s = "(abcd)" 输出:"dcba"
示例 2:
输入:s = "(u(love)i)" 输出:"iloveu" 解释:先反转子字符串 "love" ,然后反转整个字符串。
代码
#include <iostream>
#include <stack>
#include <string>
using namespace std;
class Solution {//O(N2) O(N)
public:
string reverseParentheses(string s) {
stack<string> stk;
string str;
for (auto& ch : s) {
if (ch == '(') {
stk.push(str);
str = "";
}
else if (ch == ')') {
reverse(str.begin(), str.end());
str = stk.top() + str;
stk.pop();
}
else {
str.push_back(ch);
}
}
return str;
}
};
//(u(love)i)
int main() {
string input;
getline(cin, input);
Solution a;
string ans = a.reverseParentheses(input);
cout << ans << endl;
}