给出一个字符串 s(仅含有小写英文字母和括号)。
请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。
注意,您的结果中 不应 包含任何括号。
示例 1:
输入:s = “(abcd)”
输出:“dcba”
示例 2:
输入:s = “(u(love)i)”
输出:“iloveu”
示例 3:
输入:s = “(ed(et(oc))el)”
输出:“leetcode”
示例 4:
输入:s = “a(bcdefghijkl(mno)p)q”
输出:“apmnolkjihgfedcbq”
提示:
0 <= s.length <= 2000
s 中只有小写英文字母和括号
我们确保所有括号都是成对出现的
class Solution {
public String reverseParentheses(String s) {
Deque<String> stack = new LinkedList<String>();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (ch == '(') {
stack.push(sb.toString()); //push()入栈
sb.setLength(0); //StringBuffer类的setLength(int newLength)设置字符序列的长度。
} else if (ch == ')') {
sb.reverse(); //StringBuffer类的reverse()方法:反转字符串
sb.insert(0, stack.pop()); //pop()出栈,并返回该值 ,从0开始插入出栈内容
} else {
sb.append(ch); //StringBuffer类的append()方法:将指定的字符串追加到此字符序列
}
}
return sb.toString(); //toString()返回此序列中数据的字符串表示形式。
}
}
总结:
- StringBuffer类:用于对字符串进行修改
主要方法如下:
注释:insert(int offset ,String str)方法是从offset位置开始插入字符串str。
-
LinkedList 继承 AbstractSequentialList 类:
LinkedList实现了 Queue 接口,可作为队列使用。
LinkedList 实现了 List 接口,可进行列表的相关操作。
LinkedList 实现了 Deque 接口,可作为队列使用。
LinkedList 实现了 Cloneable 接口,可实现克隆。
LinkedList 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输。 -
Stack类
详细内容面向搜索引擎学习。。。。