1190

栈模拟
使用栈,记录的是左括号的下标
遍历原字符串s,遇到左括号时,将其下标入栈
遇到右括号时,取出栈顶元素,然后知道左右括号下标,就知道中间的所有字符
再使用字符串的反转函数,重复这个过程
就是整个模拟过程

一些点
-
st.top()取栈顶下标。 -
st.pop()只负责弹出,不返回值。 -
reverse(s.begin() + cur + 1, s.begin() + i)反转的是当前一对括号内部的子串。 -
最后过滤掉所有括号。
On解法
目前对于遍历方向改变的理解,是说遇到左括号,就说明遍历方向改改变了,然后遇到右括号说明其对应的左括号的改变结束;但问题是,在遇到左括号时,如何知道接下来的遍历起点是哪里?即无法知道其对应的右括号在哪,以及,如果左括号后面衔接的是左括号等一系列情况,又如何做?

如果遇到左括号,那就从右括号的位置开始反向遍历,那这个反向该什么时候结束呢?如果遇到其它配队的右括号呢?

意思是只要遇到括号就跳转到它所对应的另一个括号位置上,但这样做的原理是什么?为什么能对于左右括号的处理是一样的?以及,这个遍历什么时候结束,即输出答案?该如何规避可能的死循环,比如i()s,左右括号连在一起的情况?或者(is),左括号跳到右括号,再碰到左括号后,如何知道这个括号是新的,还是自己的?


就是针对括号是传送门+转向器的这个想法,是如何想到的?我只能知道遇到一次时的合法性,但没想到可以两次遍历同一个括号,因为方向不同而结果不同,但如何保证这样做的合法性呢?如何保证某些字符不会被重复访问两次呢?


