020,Valid Parentheses

http://blog.csdn.net/Lnho2015/article/details/50970920

给定一个字符串,只包含’(‘, ‘)’, ‘{‘, ‘}’, ‘[’ 和’]’这些字符,检查它是否是“有效”的。

括号必须以正确的顺序关闭,例如”()” 和”()[]{}”都是有效的,”(]” 和”([)]”是无效的。

分析:

本题考查的是栈结构,具有后进先出的特性。有效包含2个方面,第一个是如果是关闭的括号,前一位一定要刚好有一个开启的括号;第二个是最终结果,需要把所有开启的括号都抵消完。一个比较容易出错的地方是,遇到关闭括号时,要先判断栈是否已经空了。

public class Solution {
    public boolean isValid(String s) {
        char[] charArr=s.toCharArray();
        List<Character> list=new ArrayList<>();
        for(Character c:charArr){
            if(c=='('||c=='{'||c=='['){
                list.add(c);
            }else{
                if(list.size()==0){
                    return false;
                }
                char last=list.get(list.size()-1);
                if(c==')'&&last!='('){
                    return false;
                }else if(c=='}'&&last!='{'){
                    return false;
                }else if(c==']'&&last!='['){
                    return false;
                }
                list.remove(list.size()-1);
            }
        }
        if(list.size()!=0){
            return false;
        }
        return true;
    }
}

个人理解:在这道题中理解栈只是把相邻的开闭符号进行栈操作。

下边的代码自己写的,是错误代码

public static  boolean isValid(String s) {
    char[] charArr=s.toCharArray();
    if(charArr.length%2!=0){
        System.out.println("1");
        return false;
    }

    for(int i=0;i<charArr.length;i=i+2){
        char a = charArr[i];
        int c = i+1;
        char b = charArr[c];
        if(a!=b){
            System.out.println(a);
            System.out.println(b);
            
            return false;
        }

    }

    return true;

}

https://leetcode.com/problems/valid-parentheses/discuss/9178/Short-java-solution

看leetcode的讨论区代码:

public boolean isValid(String s) {
    Stack<Character> stack = new Stack<Character>();
    for (char c : s.toCharArray()) {
        if (c == '(')
            stack.push(')');
        else if (c == '{')
            stack.push('}');
        else if (c == '[')
            stack.push(']');
        else if (stack.isEmpty() || stack.pop() != c)
            return false;
    }
    return stack.isEmpty();
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容