笔记草稿小红书
笔记草稿
http://www.nowcoder.com/questionTerminal/0823ca800ee04706a7e2dafc837dc236
利用堆处理括号匹配问题,用队列来添加字符,运到‘<’符号就从尾部移除一个字符。
注意边界情况,
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()); } } }