标签:stack tween 需要 反转 style 代码 自己 直接 eve
仅供自己学习
思路:
同样是滞后处理,我们需要从最里面的括号开始反转,所以反转前的元素需要用栈存储。加入栈的条件是遇到(,因为只有遇到)才能开始反转。我们用一个cur 来存储当前括号内的字符。
每当我们遇到一个(,就将cur的字符串加入进栈里,并且将cur置空。如果遇到字母就加入进cur里。当遇到)说明一个括号里面的元素都加入在cur里面,此时就将cur反转,因为这时候一个括号的反转结束,要对更大括号包括的元素反转,所以我们从栈顶取出string类的元素加入到cur原字符前面,因为他们原本就是在前面的字符,只是被暂存在栈里。然后再将栈顶的元素pop出去。然后又继续判断,如果是(就继续加入cur,如果还是)就继续反转,取出栈顶元素。到最后一个)后,所有反转好的元素都保存在了cur中,而栈为空。所以直接返回cur即可。
例如:(u(love)i),当遇到第一个)前,栈为(“”,“u”),cur=love。当遇到第一个)后,cur反转为evol,再将栈顶元素加入到cur前面,为cur=uevol,栈为(“”),然后再遇到 i 加入进cur后面,cur=uevoli,遇到)再反转为cur=iloveu,并去掉栈里的 “”,所以最后栈未空,cur=iloveu
代码:
1 class Solution { 2 public: 3 string reverseParentheses(string s) { 4 string cur=""; 5 stack<string> st; 6 for(auto& a:s){ 7 if(a==‘(‘){ 8 st.push(cur); 9 cur=""; 10 } 11 else if(a==‘)‘){ 12 reverse(cur.begin(),cur.end()); 13 cur = st.top()+cur; 14 st.pop(); 15 } 16 else{ 17 cur+=a; 18 } 19 } 20 return cur; 21 } 22 };
1190. Reverse Substrings Between Each Pair of Parentheses
标签:stack tween 需要 反转 style 代码 自己 直接 eve
原文地址:https://www.cnblogs.com/Mrsdwang/p/14539259.html