LeetCode - 1190. Reverse Substrings Between Each Pair of Parentheses
You are given a string s that consists of lower case English letters
and brackets.Reverse the strings in each pair of matching parentheses, starting
from the innermost one.Your result should not contain any brackets.
Input: s = “(abcd)”
Output: “dcba” Example 2:
Input: s = “(u(love)i)”
Output: “iloveu”
Input: s = “(ed(et(oc))el)”
Output: “leetcode”
Input: s = “a(bcdefghijkl(mno)p)q”
Output: “apmnolkjihgfedcbq”
就是从最里边的括号开始,一对儿括号中的字符串翻转一次。有左右括号的题,一般都用 stack,这道题也可以用。每次读到一个左括号,记录目前的字符串的长度,也就是左括号在整个字符串中的位置,下一次读到右括号,直接翻转这区间内的字符串即可。
string reverseParentheses(string s) {
stack<int> st;
string res;
for(const char& c : s){
if(c == '(')
st.push(res.length());
else if(c == ')'){
const int t = st.top();
st.pop();
reverse(res.begin() + t, res.end());
}
else
res += c;
}
return res;
}