笔记草稿小红书

笔记草稿

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());
        }

    }
}
全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务