力扣:匹配左右括号java

力扣:匹配左右括号java

力扣:匹配左右括号java_第1张图片

流程:

  1. 创建一个栈。
  2. 遍历字符串。
  3. 遇到所有左括号就,就对栈进行push()。
  4. 遇到右括号时,判断栈内是否为空且栈的顶端是否是该括号匹配的左括号,成功则对栈进行pop()。不符合则返回false。
  5. 最后判断栈是否为空,不为空返回false。
  6. 结尾返回true。

疑难点:

何时返回false?分三种情况:
1.匹配最后栈不为空,还有剩余左括号。
2.检测到右括号时,栈顶部不是匹配的左括号。
3.检测到右括号时,栈为空。

代码:

class Solution {
    public boolean isValid(String s) {
        Stack<Character> sta = new Stack<>();//创建一个栈
        for(int i = 0; i<s.length();i++){//遍历字符串,将所有左括号存入栈中
            if(s.charAt(i)== '(' || s.charAt(i)== '[' ||s.charAt(i)== '{' ){
                sta.push(s.charAt(i));
            }
            if(s.charAt(i)== ')'){//检测到为右括号时,判断栈是否不为空且栈的顶部为匹配的左括号
                if(!sta.isEmpty()&&sta.peek() == '(' ){
                    sta.pop();
                }else{
                    return false;
                }
            }
            if(s.charAt(i)== ']' ){//检测到为右括号时,判断栈是否不为空且栈的顶部为匹配的左括号
                if(!sta.isEmpty()&&sta.peek() == '[' ){
                    sta.pop();
                }else{
                    return false;
                }
            }
            if(s.charAt(i)== '}'){//检测到为右括号时,判断栈是否不为空且栈的顶部为匹配的左括号
                if(!sta.isEmpty()&&sta.peek() == '{' ){
                    sta.pop();
                }else{
                    return false;
                }
            }
        }
        if(!sta.isEmpty()){//判断括号是否都匹配,不全匹配则返回false
            return false;
        }
        return true;

    }
}

你可能感兴趣的:(leetcode,算法,数据结构)