天外有天,人外有人,集合之外还有集合

编程

      Deque是一个双队列,拥有队列和栈两种特性,也就是可以先进先出,也可以先进后出,主要实现类是ArrayDeque和LinkedList。

      给定一个括号,"(",")","{","}","[","]"的字符串,判断字符串是否有效。

      条件:1 左括号必须使用相同类型的右括号闭合 2 做括号必须以正确的顺序闭合

1、输入:“()”,     输出:true

2、输入:“{}”, 输出:true

3、输入:“({})”, 输出:正确

4、输入:“([}]”, 输出:错误

5、输入:“[}”, 输出:错误

代码:

@Test

public void test1(){

String s = "()";

Deque<Character> stack = new ArrayDeque<>();

for (int i = 0;i<s.length();i++){

if (s.charAt(i) == "(" || s.charAt(i) == "{" || s.charAt(i) == "["){

stack.push(s.charAt(i));

} else {

if (stack.isEmpty()){

log.info("false");

} else if (stack.peek() == "(" && s.charAt(i) != ")"){

log.info("false");

} else if (stack.peek() == "{" && s.charAt(i) != "}"){

log.info("false");

} else if (stack.peek() == "[" && s.charAt(i) != "]"){

log.info("false");

}

stack.pop();

}

}

if (stack.isEmpty()){

log.info("success");

} else {

log.info("false");

}

}

这里使用了Deque的栈特性,先进后出。

添加元素:

    push:向栈中押入元素,头元素

删除元素:

    pop:删除栈中头个元素

获取元素:

    peek:获取栈中头元素,不删除

如果使用队列特性,相关代码如下:

添加元素:

    addFirst(): 向队头插入元素,如果元素为空,则发生NPE

    addLast(): 向队尾插入元素,如果为空,则发生NPE

    offerFirst(): 向队头插入元素,如果插入成功返回true,否则返回false

    offerLast(): 向队尾插入元素,如果插入成功返回true,否则返回false

删除元素

    removeFirst(): 返回并移除队头元素,如果该元素是null,则发生NoSuchElementException

    removeLast(): 返回并移除队尾元素,如果该元素是null,则发生NoSuchElementException

    pollFirst(): 返回并移除队头元素,如果队列无元素,则返回null    

    pollLast(): 返回并移除队尾元素,如果队列无元素,则返回null

获取元素

    getFirst(): 获取队头元素但不移除,如果队列无元素,则发生NoSuchElementException

    getLast(): 获取队尾元素但不移除,如果队列无元素,则发生NoSuchElementException

    peekFirst(): 获取队头元素但不移除,如果队列无元素,则返回null

    peekLast(): 获取队尾元素但不移除,如果队列无元素,则返回null

 

 

以上是 天外有天,人外有人,集合之外还有集合 的全部内容, 来源链接: utcz.com/z/511282.html

回到顶部