【LeetCode】20 Valid Parentheses 有效括号

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。
示例 1:
输入: “()” 输出: true
示例 2:
输入: “()[]{}” 输出: true
示例 3:
输入: “(]” 输出: false
示例 4:
输入: “([)]” 输出: false
示例 5:
输入: “{[]}” 输出: true


思路:
思路很简单,利用栈,通过率也很高,重点是如何进行优化
具体思路:
遍历字符串,如果是左括号就push,是右括号就检测:栈空或pop出来的字符不是对应左括号则return false。遍历结束判断栈是否为空,不为空则return false,否则return true

Stack不支持char等基本类型,所以可以选择用String判断或者用Character判断
结果:用String的话耗时14ms,用Character耗时7~9ms
还有一种优化方法是将Stack用char数组实现,能到5ms左右

另外 String转成char有两种方法:
1 String.charAt(i)
2 String.toCharArray()
char转成String:
1 String.valueOf(‘字符’)
2 Character.toString(‘字符’)
3 “” + ‘字符’【效率很低】

用Character的代码:

class Solution {
    public boolean isValid(String s) {
        boolean valid = true;
        if (s == "")
            return valid;
        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);
                continue;
            }
            if (c == ')'){
                if (stack.empty() || !(stack.pop() == '(')){
                    valid = false;
                    return valid;
                }
            }
            if (c == '}'){
                if (stack.empty() || !(stack.pop() == '{')){
                    valid = false;
                    return valid;
                }
            }
            if (c == ']'){
                if (stack.empty() || !(stack.pop() == '[')){
                    valid = false;
                    return valid;
                }
            }
        }
        if (!stack.empty())
            valid = false;
        System.out.println(stack);
        return valid;
        
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36269372/article/details/83478437
今日推荐