LeetCode Java栈20:有效的括号

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

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:                    示例 2:                     示例 3:                 示例 4:                       示例 5:

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

解题思路:声明一个栈,遍历字符串的每一个字符,比如,第一个是左括号,入栈,如果第二个还是左括号则继续入栈,如果第二个是右括号,则与栈顶的这个左括号进行匹配判断,如果匹配成功则左括号出栈,如果匹配不成功,则表示该字符串无效,往后以此类推的入栈,及匹配判断,只要有一个匹配就为无效。

栈顶元素反映了在嵌套的层次关系中,最近的需要匹配的元素。

 

import java.util.Stack;

class Solution {

    public boolean isValid(String s) {

        Stack<Character> stack = new Stack<>();
        for(int i = 0 ; i < s.length() ; i ++){
            char c = s.charAt(i);
            if(c == '(' || c == '[' || c == '{') {
                stack.push(c);
            }else{
                if(stack.isEmpty()) {
                    return false;
                }
                char topChar = stack.pop();
                if(c == ')' && topChar != '(') {
                    return false;
                }
                if(c == ']' && topChar != '[') {
                    return false;
                }
                if(c == '}' && topChar != '{') {
                    return false;
                }
            }
        }
        return stack.isEmpty();
    }

    public static void main(String[] args) {

        System.out.println((new Solution()).isValid("()[]{}"));
        System.out.println((new Solution()).isValid("([)]"));
    }
}
结果:true false


 



 

 



 

 


 
点赞