20. Valid Parentheses

题目描述:

Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

The brackets must close in the correct order, "()" and "()[]{}" are all valid but "(]" and "([)]" are not.

题目翻译

给出一个字符串仅包含如下字符'(',')','{','}','['和']',判断输入的字符串是否有效。

所有括号以正确的顺序闭合该字符串即为有效,比如"()""()[]{}"都是有效的字符串,但是"(]""([)]"都是无效的字符串。

解题方案

标签: String

思路:

  • 使用栈结构来存储
  • 遍历字符串,当出现 ( , { , [ 这三个字符的时候,将字符压入栈中
  • 否则则代表出现的是 ) , } , ] 这三个字符
  • 当 ) , } , ] 这些字符时先判断栈内是否为空,如果为空,说明没有与之匹配的字符存在,则返回false
  • 如果不为空,则判断是否栈顶元素与当前出现的字符匹配,即是否满足 () {} [] 两两匹配,如果不匹配则返回false
  • 遍历结束后如果栈内还有元素,说明匹配不完全,则返回false,如果为空则匹配完全,返回true

代码:

class Solution {
    public boolean isValid(String s) {
        Stack<Character> st = new Stack<Character>();
        for(int i=0;i<s.length();i++){
            if(s.charAt(i) == '(' || s.charAt(i) == '{' || s.charAt(i) == '[')
                st.push(s.charAt(i));
            else if(st.isEmpty() ||
                   s.charAt(i) == ')' && st.pop() != '(' || 
                   s.charAt(i) == '}' && st.pop() != '{' || 
                   s.charAt(i) == ']' && st.pop() != '[')
                return false;
        }
        return st.size() == 0;
    }
}

参考资料

同步发表于 http://blog.csdn.net/grape875499765/article/details/78200994

results matching ""

    No results matching ""