队列&栈//有效的括号

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

有效字符串需满足:

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

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

示例 1:

输入: "()"
输出: true

示例 2:

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

示例 3:

输入: "(]"
输出: false

示例 4:

输入: "([)]"
输出: false

示例 5:

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

 “{”和“}”的ASCII码相差2:

class Solution {
    public boolean isValid(String s) {
        if(s == ""||s.length() == 0)
            return true;
        Stack stack = new Stack();
        stack.push(s.charAt(0));
        for(int i = 1; i < s.length(); i++){
            if(!stack.isEmpty()){
                if(stack.peek().equals((char)(s.charAt(i)-1))||stack.peek().equals((char)(s.charAt(i)-2))){
                    stack.pop();
                }else{
                    stack.push(s.charAt(i));
                }
            }else{
                stack.push(s.charAt(i));
            }
        }
        return stack.isEmpty();
    }
}
class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for(int i = 0; i < s.length(); i++){
            char ch = s.charAt(i);
            if(ch == '('||ch == '['||ch == '{'){
                stack.push(ch);
            }
            else{
                if(stack.isEmpty())
                    return false;
                char topChar = stack.pop();
                if(ch == ')'&topChar != '(')
                    return false;
                else if(ch == ']'&&topChar != '[')
                    return false;
                else if(ch == '}'&&topChar != '{')
                    return false;
            }
        }
        return stack.isEmpty();
    }
}
class Solution {
public:
    bool isValid(string s) {
        stack<char> result;
        int n = s.size();
        if(n == 0) return true;
        for(int i = 0; i < n; i++){
            if(result.empty())
                result.push(s[i]);
            else if(result.top() == '('&&s[i] == ')'||result.top() == '['&&s[i] == ']'||result.top() == '{'&&s[i] == '}')
                result.pop();
            else
                result.push(s[i]);
        }
        return result.empty();
    }
};
class Solution {
public:
    bool isValid(string s) {
        stack<char> result;
        for(auto &a:s){
            if(a == '(')
                result.push(')');
            else if(a == '[')
                result.push(']');
            else if(a == '{')
                result.push('}');
            else if(result.empty()||result.top()!=a)
                return false;
            else
                result.pop();
        }
        return result.empty();
    }
};
原文地址:https://www.cnblogs.com/strawqqhat/p/10602363.html