LeetCode算法栈—有效的括号

目录

有效的括号

用到的数据结构:

位运算、Map 和 Stack

Stack 常用的函数:

题解:

代码:

运行结果;


给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()"
输出:true

示例 2:

输入:s = "()[]{}"
输出:true

示例 3:

输入:s = "(]"
输出:false

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

用到的数据结构:

位运算、Map 和 Stack
  1. 使用位运算 (n&1)==1 来判断字符串长度 n 是否为奇数,如果是奇数则直接返回 false。因为有效的括号序列必须是成对出现的。

  2. 使用 Map 数据结构 buckets 来存储左右括号的映射关系。键值对的形式为左括号-右括号。

  3. 使用了 Stack 栈数据结构 stack 来存储遍历过程中的左括号

Stack 常用的函数:
  • push(E item): 将元素 item 压入栈顶。

  • pop(): 弹出并返回栈顶的元素。

  • peek(): 返回栈顶的元素,但不进行弹出操作。

  • isEmpty(): 判断栈是否为空,如果为空则返回 true,否则返回 false。

  • size(): 返回栈中元素的个数。

题解:

  1. 遍历字符串的每个字符,如果当前字符是左括号,则将其入栈;如果当前字符是右括号,则判断栈是否为空或者当前右括号是否与栈顶的左括号匹配。如果不匹配,则返回 false;如果匹配,则弹出栈顶的左括号。

  2. 最后判断栈是否为空,如果为空则表示所有的左括号都有相应的右括号匹配,返回 true;否则返回 false。

代码:

class Solution {
    public boolean isValid(String s) {
      int n=s.length();
      // 判断奇偶
      if((n&1)==1) return false;
      // 存储左右括号映射
      Map buckets=new HashMap<>();
      buckets.put('(',')');
      buckets.put('[',']');
      buckets.put('{','}');
      // 存储左括号
      Stack stack =new Stack<>();
      // 存储当前括号字符
      char bucket;
      // 遍历处理
      for(int i=0;i

运行结果;

LeetCode算法栈—有效的括号_第1张图片

你可能感兴趣的:(数据结构与算法,题解,学习总结,算法,leetcode,java)