题目描述:字符串str="((ur)oi)",()表示需要将括号内部的字符串翻转,输出翻转后的字符串。示例输出为"iour"。
思路:利用栈将括号内的字符串翻转,利用队列存储翻转后的字符串。具体思路如下:
1. 遍历str的字符,如果字符不是')',压入栈中;
2. 如果是')',从栈顶依次弹出元素,将弹出元素压入队列,直到栈顶元素为'(',弹出左括号;
3. 将队列元素依次出队,出队元素压入栈中;
4. 继续遍历。
public static String reverse(String str){
StringBuffer answer=new StringBuffer();
if(str==null||str.length()==0) return "";
char[] chars=str.toCharArray();
int length=chars.length;
Stack<Character> stack=new Stack<>();
Queue<Character> queue=new LinkedList<>();
//临时变量
char currentValue;
for(int i=0;i<length;i++){
//遇到右括号,出栈和入队,再入栈
if(chars[i]==')'){
while(!stack.empty()&&stack.peek()!='('){
currentValue=stack.pop();
((LinkedList<Character>) queue).addLast(currentValue);
}
if(!stack.empty()){
stack.pop();
}
while(!queue.isEmpty()){
stack.push(((LinkedList<Character>) queue).pollFirst());
}
}
else{
//普通元素和左括号入栈
stack.push(chars[i]);
}
}
for(char elem:stack){
answer.append(elem);
}
return answer.toString();
}