码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode -- Valid Parenthese

时间:2015-10-12 21:08:00      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:

Question:

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.

 

Analysis:

问题描述:给出一个字符串,包含‘(‘‘)‘‘{‘‘}‘‘[‘ and ‘]‘确定它是否是有效地匹配括号。

思路:一看到括号匹配问题肯定想到用栈。遇到左括号就进栈;遇到右括号若栈顶元素与之匹配则POP出栈顶元素,若不匹配则返回false。

注意特殊情况:如"{}[]()", 或者“{[}]”, 或者“{{}}{{”等情况。

 

Answer:

public class Solution {
    public boolean isValid(String s) {
        char[] ch = s.toCharArray();
        int n = ch.length;
        if(ch.length == 0 || ch.length % 2 != 0)
            return false;
        if(ch[0] == ‘}‘ || ch[0] == ‘]‘ || ch[0] == ‘)‘)
            return false;
        Stack<Character> st = new Stack<Character>();
        st.add(ch[0]);
        int i = 1;
        while(!st.isEmpty() && i < n) {
            if(ch[i] == ‘{‘ || ch[i] == ‘[‘ || ch[i] == ‘(‘) {
                st.add(ch[i]);
                i++;
            } else {
                if(st.isEmpty())
                    return false;
                char c = st.pop();
                if(c == ‘{‘ && ch[i] != ‘}‘ || c == ‘[‘ && ch[i] != ‘]‘
                        || c == ‘(‘ && ch[i] != ‘)‘)
                    return false;
                i++;
                if(i < n && (ch[i] == ‘{‘ || ch[i] == ‘[‘ || ch[i] == ‘(‘)) {
                    st.add(ch[i]);
                    i++;
                } 
            }
        }
        System.out.println(i +" " +st.size());
        if(!st.isEmpty() || i < n - 1)
            return false;
        
        return true;
    }
    
}

 

LeetCode -- Valid Parenthese

标签:

原文地址:http://www.cnblogs.com/little-YTMM/p/4872737.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!