码迷,mamicode.com
首页 > 其他好文 > 详细

1190. Reverse Substrings Between Each Pair of Parentheses

时间:2021-03-17 14:05:29      阅读:0      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!