利用堆处理括号匹配问题,用队列来添加字符,运到‘<’符号就从尾部移除一个字符。
注意边界情况,
1.两层嵌套括号
2.当双端队列为空时,遇到‘<’符号
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Iterator;
import java.util.Scanner;
public class Main {
/*
薯队长写了一篇笔记草稿,请你帮忙输出最后内容。
1.输入字符包括,"(" , ")" 和 "<"和其他字符。
2.其他字符表示笔记内容。
3.()之间表示注释内容,任何字符都无效。 括号保证成对出现。
4."<"表示退格, 删去前面一个笔记内容字符。括号不受"<"影响 。
*/
public static Deque<Character> editByStr(String inputs){
Deque<Character> editedWords = new ArrayDeque<>();
Deque<Character> findAllBrackets = new ArrayDeque<>();
for (char cur : inputs.toCharArray()){
if (cur == '('){
findAllBrackets.push(cur);
continue;
}
if (!findAllBrackets.isEmpty()){
if (cur == ')'){
findAllBrackets.pop();
}
continue;
}
// 遇到删除符号
if (!editedWords.isEmpty() && cur=='<'){
editedWords.removeLast();
}else {
editedWords.addLast(cur);
}
}
return editedWords;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String inputs = sc.nextLine();
sc.close();
Deque<Character> editedWords = editByStr(inputs);
Iterator<Character> iter = editedWords.iterator();
while(iter.hasNext()){
System.out.print(iter.next());
}
}
}

京公网安备 11010502036488号