反转每对括号间的子串
1190. 反转每对括号间的子串 - 力扣(LeetCode)
题目
给出一个字符串 s
(仅含有小写英文字母和括号)。
请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。
注意,您的结果中 不应 包含任何括号。
示例 1:
输入:s = "(abcd)" 输出:"dcba"
示例 2:
输入:s = "(u(love)i)" 输出:"iloveu" 解释:先反转子字符串 "love" ,然后反转整个字符串。
示例 3:
输入:s = "(ed(et(oc))el)" 输出:"leetcode" 解释:先反转子字符串 "oc" ,接着反转 "etco" ,然后反转整个字符串。
提示:
1 <= s.length <= 2000
s
中只有小写英文字母和括号- 题目测试用例确保所有括号都是成对出现的
自己的思路和代码
思路
思路很简单,就是在没遇到 )的时候,一直将字符入栈,碰到 ) 的时候,将元素出栈,存储起来,直到在栈中遇到 ( ,然后将存储的元素反向入栈即可,直到遍历完字符串中的所有元素。
代码
class Solution {
public:
string reverseParentheses(string s) {
stack<char> st;
vector<char> table;
string result;
for(auto i : s) {
if(i != ')') {
st.push(i);
} else {
while(st.top() != '(') {
table.push_back(st.top());
st.pop();
}
st.pop();
for(auto j : table) {
st.push(j);
}
table.clear();
}
}
int sum = st.size();
for(int i=0; i<sum; i++) {
result += st.top();
st.pop();
}
reverse(result.begin(), result.end());
return result;
}
};