1190. 反转每对括号间的子串
难度:中等
语言:java
题目内容
给出一个字符串 s(仅含有小写英文字母和括号)。
请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。
注意,您的结果中 不应 包含任何括号。
解题思路
这题开始我看了半天开始没看明白题目什么意思,特别是示例2,我开始没明白,为啥love不用反转,后来看了半天才搞明白,最里面先反转,然后外面再反转,这也就是每日抑题的原因了,用示例2举个例子
- (u(love)i)
- (uevoli)
- iloveu
大概是这么个转换过程,所以方法就是,要先反转最里面的,再反转外部的,最后对全部数组进行一个reverse就可以了。
外部先不动,操作内部,第一个想到的就是堆栈,写的时候其实有点绕,在遇到“(”的时候,先把之前累计的字符串推入stack,然后重新开始累计字符串,在遇到“)”的时候,先反转,再将之前推入stack的放到累计字符串的前面来, 依旧用示例2来举例
- u 先放入stack
- 积累love字符串直到遇到)
- 反转并添加 变成 uevol
- 继续积累
- 直到遇到下一个),字符串为 uevoli
- 反转得到结果
这里用到了StringBuffer,那就在这里复习一下StringBuffer
- String:String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,这样不仅