Leetcode: NO.20 有效的括号

题目

链接:https://leetcode-cn.com/problems/valid-parentheses

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true
示例 2:

输入: "()[]{}"
输出: true
示例 3:

输入: "(]"
输出: false
示例 4:

输入: "([)]"
输出: false
示例 5:

输入: "{[]}"
输出: true

解题记录

通过对左括号的存储,以及右括号的判断来确定是否为完整的有效的括号序列:

class Solution {
    public boolean isValid(String s) {
        char[] seq = s.toCharArray();
        int len = seq.length;
        if(len==0) return true;
        if(len%2!=0) return false;
        char[] info = new char[seq.length];
        int index = 0;
        info[0] = seq[0];
        for (int i=1; i<len; i++){
            if(seq[i]=='('||seq[i]=='['||seq[i]=='{'){
                index ++;
                info[index] = seq[i];
            }else{
                if(info[index]!=getPair(seq[i])) return false;
                index --;
            }
        }
        return index==-1;
    }

    public char getPair(char s){
        switch(s){
            case '(':return ')';
            case ')':return '(';
            case '[':return ']';
            case ']':return '[';
            case '{':return '}';
            case '}':return '{';
            default: return s;
        }
    }
}

在这里插入图片描述

进阶

可以通过ASCII中左右括号之间差值很小作为判断依据

  • ( 是 40 ) 是 41
  • [ 是 91 ] 是 93
  • { 是 123 } 是 125
    通过判断差值是不是1或2
class Solution {
    public boolean isValid(String s) {
        char[] seq = s.toCharArray();
        int len = seq.length;
        if(len==0) return true;
        if(len%2!=0) return false;
        char[] info = new char[seq.length];
        int index = 0;
        info[0] = seq[0];
        for (int i=1; i<len; i++){
            if(seq[i]=='('||seq[i]=='['||seq[i]=='{'){
                index ++;
                info[index] = seq[i];
            }else{
                if(seq[i] - info[index] != 2 && seq[i] - info[index] != 1) return false;
                index --;
            }
        }
        return index==-1;
    }
}

在这里插入图片描述

你可能感兴趣的:(算法)