代码随想录二刷 |队列与栈 |有效的括号

代码随想录二刷 |队列与栈 |有效的括号

题目描述

20.有效的括号

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

有效字符串需满足:

  • 左括号必须用相同类型的右括号闭合。
  • 左括号必须以正确的顺序闭合。
  • 每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = “()”
输出:true

示例 2:

输入:s = “()[]{}”
输出:true

示例 3:

输入:s = “(]”
输出:false

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 ‘()[]{}’ 组成

解题思路 & 代码实现

整体思路是遍历字符串,遇到左方向的括号时,将对应的右方向括号放入栈中,后面遇到对应的右方向的括号就将栈中的括号弹出。遍历完成后,如果栈为空,说明没有不匹配的情况,return true。

有三种不匹配的状态

  1. 字符串里左方向的括号多余了
( ( {
    } )
  1. 字符串里右方向的括号多余了
( {
    [ ] } ) )
  1. 括号没有多余,括号的类型没有匹配上
([{
   ]])

第一种:
遍历完成之后栈不为空,return false

第二种:
遍历过程中栈为空,说明右括号多余,return false

第三种:
遍历过程中发现没有要匹配的括号,return false

class Solution {
   
public:
    bool isValid(string s) {
   
    	// 如果s的长度为奇数,一定不符合要求
        if (s.size() % 2 != 0) return false; 
        stack<char> st;
        
        for (int i = 0; i < s.size(); i++) {
   
					if (s[i] == '{') st.push('}');
					else if (s[i] == '[') st.push(']');
					else if (s[i] == '(') st.push(')');
					// 第二、第三种情况
					else if (st.empty() || s[i] != st.top()) return false;
					else st.pop();
				}
				// 第一种情况
				return st.empty();
		}
};

相关推荐

  1. 代码随想队列有效括号

    2023-12-06 14:44:03       44 阅读
  2. 代码随想 队列

    2023-12-06 14:44:03       31 阅读
  3. 代码随想——单调day58

    2023-12-06 14:44:03       16 阅读
  4. 代码随想leetcode200题之队列

    2023-12-06 14:44:03       14 阅读
  5. 代码随想队列

    2023-12-06 14:44:03       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-06 14:44:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-06 14:44:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-06 14:44:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-06 14:44:03       20 阅读

热门阅读

  1. ubuntu重启后下无wifi,蓝牙和飞行模式切换问题

    2023-12-06 14:44:03       40 阅读
  2. github可访问但无法clone问题

    2023-12-06 14:44:03       35 阅读
  3. Linux计算机系统参数获取和压力测试

    2023-12-06 14:44:03       38 阅读
  4. Ubuntu22.04LTS配置rsync服务

    2023-12-06 14:44:03       44 阅读
  5. [cmake] --- find_package

    2023-12-06 14:44:03       28 阅读
  6. 如何关闭vue项目中的[eslint]校验

    2023-12-06 14:44:03       40 阅读
  7. CSS外边距重叠:原理、结果

    2023-12-06 14:44:03       29 阅读
  8. LeetCode1005. Maximize Sum Of Array After K Negations

    2023-12-06 14:44:03       23 阅读
  9. vue打包完成后出现空白页原因及解决

    2023-12-06 14:44:03       42 阅读