思路:1、遇到处理括号的问题,可以想到使用栈。
2、反转字符串,可以使用StringBuffer的reverse方法,再使用StringBuffer的toString方法转换成字符串
3、遇到字母,使用StringBuffer类的append方法拼起来,保存在sb中,sb是StringBuffer类
遇到(,将(前的内容sb,即待处理的东西保存在栈中,并清空sb
遇到 ),将栈顶的内容与反转后的sb进行拼接。
class Solution {
public String reverseParentheses(String s) {
int n = s.length();
Deque<String> stack = new LinkedList<String>();//用于保存(左边的字符串
StringBuffer sb = new StringBuffer();//用于拼串
char ch ;//保存遍历到的
for (int i = 0; i < n; i++) {
ch = s.charAt(i);
if(ch == '('){//将str压栈,并将str清空,此str是(左边的内容
stack.push(sb.toString());
sb.setLength(0);//将sb的长度设置为0,相当于清空
}else if(ch == ')'){ //弹栈,将弹出来的元素与反转后的Sb拼串
sb.reverse();
sb.insert(0,stack.pop());//相当于stack.pop()拼接上sb.reverse()
}else{//字母
sb.append(ch);
}
}
return sb.toString();
}
}
StringBuffer.insert( )方法
public class Dm{
public static void main(String[] args){
StringBuffer str = new StringBuffer("谷歌");
str.insert(1, "大");//在StringBuffer类型字符串中第2个字符元素的位置添加一个指定字符(可为整形、字符型或,其他任意类型)
System.out.println(str);//输出结果为:谷大歌
}
}
StringBuffer.toString( )方法
public class test {
public static void main(String[] args) {
//使用StringBuffer的toString()方法,可以将StringBuffer转换成String
StringBuffer sb = new StringBuffer("abcd") ;
sb.append("efg") ;
System.out.println(sb);//abcdefg,System.out.println()会默认调用toString()
StringBuffer sb2 = new StringBuffer();
System.out.println(sb2);
String str = sb.toString() ;
System.out.println(str) ; // abcdefg
}
}
StringBuffer.setLength( )方法
Java面试题:setLength方法的作用是什么
【考题题干】下面程序能编译通过吗?如果不能请说明为什么,能运行结果是什么?
public class aa {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("good_bye");
sb.setLength(4);
System.out.println(sb);//good
sb.setLength(0);
System.out.println(sb);//""
}
}
请选择一个正确的答案:
A.将会打印good。
B.将会打印good_。
C.将会打印good_bye。
D.在运行时会抛出1个异常。
E.不能编译,因为StringBuffer类中没有setLength方法。
【试题分析】setLength方法的作用是设置字符序列的长度。序列将被更改为一个新的字符序列,新序列的长度由参数指定。所以在本题中就将sb字符串的长度由原来的8截短到了4,所以将会打印出A
【参考答案】A