import java.util.*;

public class Solution {
    /**
     * @param s string字符串
     * @return bool布尔型
     */
    public boolean isValid (String s) {
        // write code here
        Stack<Character> stk = new Stack<Character>();//创建stack对象,辅助栈

        for (int i = 0; i < s.length(); i++) {
            //charAt(i) 函数 是获取字符串中i位置的字符 str.charAt(i)的意思是第i个字符在字符串str中所占的位置
            if (s.charAt(i) == '(' ) { //当为(字符时,将匹配字符入栈
                stk.push(')');
            }

            else if (s.charAt(i) == '[' ) { //当为[字符时,将匹配字符入栈
                stk.push(']');
            }

            else if ( s.charAt(i) == '{' ) { //当为{字符时,将匹配字符入栈
                stk.push('}');
            }

            else { //三种都不满足时,判断当前字符是否与栈顶元素一样(栈非空时)
                if (stk.empty() || stk.pop() != s.charAt(i))
                    return false;
                //stk.pop();
            }
        }
        return stk.empty();
    }
}

本题总结:

1、stack <int> stk

1:stk.push(x)

压入栈---进栈

 2:  stk.pop()

出栈

 3:  stk.size()

   统计栈内有多少个元素

4: stk.empty()

它的作用跟stk.size() == 0是一样的

5: stk.top()

获取栈顶元素,但是不会弹出

2、Stack<Character> stk = new Stack<Character>(); 字符类型

charAt(i) 函数 是获取字符串中i位置的字符

str.charAt(i)的意思是第i个字符在字符串str中所占的位置