力扣20. 有效的括号

简介: 力扣20. 有效的括号

力扣20. 有效的括号

一、题目描述:

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。

示例 1:

输入:s = "()"输出:true示例 2:

输入:s = "()[]{}"输出:true示例 3:

输入:s = "(]"输出:false示例 4:

输入:s = "([)]"输出:false示例 5:

输入:s = "{[]}"输出:true

提示:

1 <= s.length <= 10^4s 仅由括号 '()[]{}' 组成

来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-parentheses著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

这道题考察了什么思想?你的思路是什么?

  1. 我认为这道题目是简单的栈的使用,但是好久没用栈,都生疏了。因为我们每次遇到一个左括号,都入栈,然后遇到相同类型的右括号就出栈。因为后来的左括号需要相应的右括号先来,所以我们将后来的左括号放入栈顶。

做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?

  1. 不是,第一次编写的代码如下,出现了问题,提交报错“Line 23: Char 17: runtime error: index -128 out of bounds for type 'char [*]' [solution.c]”。

charHashMap(charch){

   if(ch=='}') return'{';

   if(ch==')') return'(';

   if(ch==']') return'[';

   return0;

}

 

boolisValid(char*s){

   intn=strlen(s);

   if(n%2==1){

       returnfalse;

   }

 

   chartemp[n+1],top=0;

   for(inti=0;i<n;i++){

       if(HashMap(s[i]) !=0){

           if(top==0||temp[top-1] !=HashMap(s[i])){

               returnfalse;

           }

           top--;

       }

       else{

           temp[top++] =s[i];

       }

   }

   if(top==0){

       returntrue;

   }else{

       returnfalse;

   }

}

  1. 但是我在本地Clion中输入那个测试用例又可以运行,真是头疼,于是我开始仔细阅读代码,终于发现了一个地方有问题。

chartemp[n+1],top=0;

  1. top应该是int类型,于是一改。。。
    果然通过了。。。。

有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?

  1. 本身是Python选手,看到了大佬写的Python解法,我自愧不如。

classSolution:

   defisValid(self, s: str) ->bool:

       dic = {'{': '}',  '[': ']', '(': ')', '?': '?'}

       stack = ['?']

       forcins:

           ifcindic: stack.append(c)

           elifdic[stack.pop()] != c: returnFalse

       returnlen(stack) == 1

 

作者:jyd

链接:https://leetcode-cn.com/problems/valid-parentheses/solution/valid-parentheses-fu-zhu-zhan-fa-by-jin407891080/

来源:力扣(LeetCode)

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  1. 这代码如此Pythonic

三、AC 代码:

charHashMap(charch){

   if(ch=='}') return'{';

   if(ch==')') return'(';

   if(ch==']') return'[';

   return0;

}

 

boolisValid(char*s){

   intn=strlen(s);

   if(n%2==1){

       returnfalse;

   }

 

   chartemp[n+1];

   inttop=0;

   for(inti=0;i<n;i++){

       if(HashMap(s[i])){

           if(top==0||temp[top-1] !=HashMap(s[i])){

               returnfalse;

           }

           top--;

       }

       else{

           temp[top] =s[i];

           top++;

       }

   }

   if(top==0){

       returntrue;

   }else{

       returnfalse;

   }

}

四、总结:

如果学栈的相关知识,这道题目应该是入门必做的!

目录
相关文章
|
存储 C语言 索引
环形链表、环形链表 II、有效的括号​​​​​​​【LeetCode刷题日志】
环形链表、环形链表 II、有效的括号​​​​​​​【LeetCode刷题日志】
|
3月前
|
算法 Go 索引
【LeetCode 热题100】回溯:括号生成 & 组合总和(力扣22 / 39 )(Go语言版)
本文深入解析了LeetCode上的两道经典回溯算法题:**22. 括号生成**与**39. 组合总和**。括号生成通过维护左右括号数量,确保路径合法并构造有效组合;组合总和则允许元素重复选择,利用剪枝优化搜索空间以找到所有满足目标和的组合。两者均需明确路径、选择列表及结束条件,同时合理运用剪枝策略提升效率。文章附有Go语言实现代码,助你掌握回溯算法的核心思想。
93 0
|
10月前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
198 4
|
11月前
|
算法 C++
Leetcode第二十二题(括号生成)
这篇文章讨论了如何使用递归算法解决LeetCode第22题“括号生成”的问题,提供了两种C++的实现方法,目的是生成所有有效的括号组合。
95 0
Leetcode第二十二题(括号生成)
LeetCode第22题括号生成
该文章介绍了 LeetCode 第 22 题括号生成的解法,通过回溯算法生成所有可能的括号组合,在递归过程中根据左右括号数量的条件进行剪枝,从而得到有效的括号组合。
LeetCode第22题括号生成
|
11月前
|
存储 C++ 容器
Leetcode第二十题(有效的括号)
这篇文章介绍了如何使用栈来解决LeetCode第20题“有效的括号”问题,提供了两种方法:数组栈和容器栈,以及相应的C++代码实现。
75 0
|
存储 算法
LeetCode第20题有效的括号
该文章介绍了 LeetCode 第 20 题有效的括号的解法,通过分析有效括号的特征,使用栈结构存储括号关系,判断遇到右边括号时栈顶是否有匹配的左边括号,从而解决问题,同时总结了栈的先进后出结构可用于解决有规律的符号匹配问题。
LeetCode第20题有效的括号
|
算法 Python
【Leetcode刷题Python】括号匹配问题
一种解决括号匹配问题的Python实现方法,通过计算给定括号串的所有子串的最长合法括号子序列长度之和来确定权值。
97 0
|
机器学习/深度学习 Python
【Leetcode刷题Python】22. 括号生成
本文介绍了了LeetCode题目22的两种Python编程解决方案,题目要求生成所有可能的且有效的括号组合,包括暴力求解和回溯方法。
91 0
|
Python
【Leetcode刷题Python】20. 有效的括号
LeetCode上题目“20. 有效的括号”的Python解决方案,使用栈数据结构来验证括号序列的有效性。具体实现中,会在栈中预先放置一个特殊字符以避免在弹出操作时出现空栈错误,并通过匹配左右括号来判断括号序列是否有效。
124 0

热门文章

最新文章