欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

判断括号是否匹配

程序员文章站 2022-07-15 16:28:04
...

题目要求
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:

  • 左括号必须用相同类型的右括号闭合。
  • 左括号必须以正确的顺序闭合。
  • 注意空字符串可被认为是有效字符串。
    解题思路:利用栈来实现判断括号是否匹配
class Solution {
    public boolean isValid(String s) {
    Stack<Character> stack = new Stack<>();
    for(int i = 0; i<s.length(); i++){
        Character c = s.charAt(i);//获取下标为i的字符
        if(c == '(' || c == '[' || c == '{'){
            stack.push(c);//满足要求就让该字符入栈
            continue;
        }
        //判断字符是否有效,无效直接返回false
        if(stack.empty()){
            return false;
        }
        Character top = stack.pop();//取栈顶字符,看是否和下标为i的字符匹配
        if(top == '(' && c == ')'){
            continue;
        }
        if(top == '{' && c == '}'){
            continue;
        }
        if(top == '[' && c == ']'){
            continue;
        }
        return false;
    }
    //当且仅当栈中所有元素均出栈,才满足括号匹配
    if(stack.empty()){
        return true;
    }
    return false;
    }
}

代码优化,用Map思路更为清楚!!!

class Solution {
    public boolean isValid(String s) {
    Map<Character,Character> map = new HashMap<>();
    map.put('(',')');
    map.put('{','}');
    map.put('[',']');
    Stack<Character> stack = new Stack<>();
    for(int i = 0; i<s.length(); i++){
        Character c = s.charAt(i);//获取下标为i的字符
        if(c == '(' || c == '[' || c == '{'){
            stack.push(c);//满足要求就让该字符入栈
            continue;
        }
        //判断字符是否有效,无效直接返回false
        if(stack.empty()){
            return false;
        }
        Character top = stack.pop();//取栈顶字符,看是否和下标为i的字符匹配
        if(map.get(top) == c){
            continue;
        }
        return false;
    }
    //当且仅当栈中所有元素均出栈,才满足括号匹配
    if(stack.empty()){
        return true;
    }
    return false;
    }
}
相关标签: 经典题目