LeetCode之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.

题目大意:

  给定一个字符串,判断字符串中的括号是否配对。

思路:

  判断括号是否配对问题是数据结构中栈那一章最重要的一个应用之一,有了数据结构的只是基础之后这道题做起来还是蛮容易的。大体思路是:当遇到左半括号时入栈,当遇到右半括号时取栈顶看其是否匹配,如果匹配则弹出栈顶继续扫描字符串,如果不匹配则直接返回false。当在字符串扫描结束,栈中元素恰好为空时匹配成功,返回true。

代码:

class Solution {
public:
    bool isValid(std::string s) {
        const int size = s.size();
        std::stack<char> v;

        if (size % 2) {
            return false;
        } else if (size == 0) {
            return true;
        }

        for (int i = 0; i < size; ++i) {
            const char tmp = s[i];
            if (tmp == '(' || tmp == '{' || tmp == '[') {
                v.push(tmp);
            } else if ((!v.empty()) && ((tmp == ')' && v.top() == '(') || (tmp == ']' && v.top() == '[') || (tmp == '}' && v.top() == '{'))) {
                v.pop();
            } else {
                return false;
            }
        }
        return v.empty();
    }
};

  在判断的时候也可以使用ASCII码的差值来判断,因为所要匹配的各个ASCII码值为:(--->40、)--->41、[--->91、 ]--->93、{--->123、 }---->125所以可以通过判断ASCII的差值是否等于1或者2来得到答案,这个判断思路是在LeetCode的答案区看到的,当时他的代码是这样写的:

bool isValid(string s) {

        stack<char> pare;

        for(auto c:s){
            if(c=='(' || c=='{' || c=='['){
                pare.push(c);
            }else{
                if(pare.empty()) return false;

                if(c-pare.top()>2) return false;
                //becasue in Ascii, (:40, ):41, [:91, ]:93, {:123, }:125
                pare.pop();
            }
        }
        return pare.empty();
}

  可是在我看来这段代码算是有问题。这段代码中他直接把所有的情况都判断为扫描值减去栈顶元素是否小于2来判断是否匹配的,可是事实上92的ASCII码所对应的字符是\,所以当出现[\]这样一串字符时就出现问题了,下边是我在LeetCode中测试的结果:

  可见程序确实是出现了BUG,报出了Runtime Error的错误。这里的Runtime Error的错误不知道是这段代码报出来的还是内部标准答案报出来的我不得而知。但是当提交这段代码的时候它确实AC了这道题。可见LeetCode在这道题的测试用例上不够全面。当然,这个判断方法也是可以的,不过要明确分类判断差值到底是1还是2。

时间: 2024-10-05 22:46:27

LeetCode之20---Valid Parentheses的相关文章

[Leetcode][Python]20: Valid Parentheses

# -*- coding: utf8 -*-'''__author__ = '[email protected]' 20: Valid Parentheseshttps://oj.leetcode.com/problems/valid-parentheses/ Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.T

LeetCode:20. Valid Parentheses(Easy)

1. 原题链接 https://leetcode.com/problems/valid-parentheses/description/ 2. 题目要求 给定一个字符串s,s只包含'(', ')', '{', '}', '[' 和 ']'. 合法:形如"()[]"."{[()]}" 不合法:形如"([)]"."[[((" 判断所给字符串s是否合法. 3. 解题思路 对字符串s转换成字符数字进行遍历. 利用栈,遇到左半边字符:'

【LeetCode】20. Valid Parentheses

题目: 思路:用Stack基本操作完成. 要检测输入字符是否满足这个条件,一个非常合适的数据结构是stack,后进先出的特征正好满足检测的需求.在检测的时候,每次检查一个字符,如果是左括号,就入栈,如果是右括号,并且右括号和当前栈顶符号是左右配对的,那么就弹出栈顶并且进行下一次检测,如果不满足上面两种情况,就说明检查到了一个非法字符,返回false. public class Solution { public boolean isValid(String s) { if(s.length()=

【leetcode 】20. Valid Parentheses

这题需要注意: 栈的空指针 全局变量stack需要clear 输入结束时栈长度不为空 public class Solution { private static final Stack<Character> stack = new Stack<Character>(); public boolean isValid(String s) { stack.clear(); for (int i = 0; i < s.length(); ++i) { char c = s.cha

LeetCode解题笔记 - 20. Valid Parentheses

这星期听别人说在做LeetCode,让他分享一题来看看.试了感觉挺有意思,可以培养自己的思路,还能方便的查看优秀的解决方案.准备自己也开始. 解决方案通常有多种多样,我觉得把自己的解决思路记录下来,阶段性查看,一定能对自己有帮助. 这是我做的第一题,所以记录也从这题开始,之后尽力以简短的说明,描述出思路,方便以后能回顾到简介明了的记录. 20. Valid Parentheses Given a string containing just the characters '(', ')', '{

[LeetCode]20 Valid Parentheses 有效的括号

[LeetCode]20 Valid Parentheses 有效的括号 Description Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid. An input string is valid if: Open brackets must be closed by the same type of brac

20. Valid Parentheses【leetcode】

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 "(]&quo

leetCode 20. Valid Parentheses 字符串

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 "(]&quo

leetcode题解: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 "([)]&

leetcode 之 Longest Valid Parentheses

leetcode中和括号匹配相关的问题共有三个,分别是: 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 a