当前位置: 首页 > news >正文

C++速通LeetCode简单第15题-有效的括号(全网最易懂代码注释)

解法分析: 

       越远的左括号匹配越远的右括号,越近的左括号匹配越近的右括号,正符合堆栈先进后出性质 。   

       因此利用堆栈保存左括号,通过循环逐个括号判断:

class Solution {
public:bool isValid(string s) {stack<char> stk;char pre;//读取上一个入栈的左括号int leftcount=0;//记录左括号个数,和总个数对比if(s.size()%2) return false;//不是偶数个括号if(s[0]==')'||s[0]==']'||s[0]=='}') return false;//开头不能是右括号for(int i = 0;i<s.size();i++){   if(s[i]=='('||s[i]=='['||s[i]=='{')//左括号入栈,遇到右括号出栈配对{stk.push(s[i]);leftcount++;}if(leftcount > (s.size() >> 1)) return false;//左括号个数不能过半if(stk.size() > (s.size() >> 1)) return false;//栈内元素不能过半if(s[i]==')'){   if(stk.empty()) return false;//栈为空说明没有配对的左括号pre = stk.top();//出栈检查前一个左括号是否匹配当前右括号stk.pop();if(pre!='(') return false;}else if(s[i]==']'){if(stk.empty()) return false;pre = stk.top();stk.pop();if(pre!='[') return false;}else if(s[i]=='}'){if(stk.empty()) return false;pre = stk.top();stk.pop();if(pre!='{') return false;}}return true;}
};


http://www.mrgr.cn/news/27313.html

相关文章:

  • 【数据结构】6——图1,概念
  • 如何搭建一个外卖会员卡系统?
  • 【面向对象】设计模式分类
  • Day11-K8S日志收集及搭建高可用的kubernetes集群实战案例
  • 多目标优化算法求解LSMOP(Large-Scale Multi-Objective Optimization Problem)测试集,MATLAB代码
  • 图数据库 neo4j 安装
  • 回溯-全排列
  • 关于java同步调用多个接口并返回数据
  • 数据结构之快速排序、堆排序概念与实现举例
  • 如何注册Liberty大学并获取Perplexity Pro
  • linux 操作系统下cupsenable命令介绍和使用案例
  • 【Ubuntu】Ubuntu双网卡配置 实现内外网互不影响同时可用
  • 【Qt绘图】—— 运用Qt进行绘图
  • C++数据结构-树的概念及分类介绍(基础篇)
  • Numpy 数组拼接与拆分函数详解
  • 检查一个复数C的实部a和虚部b是否都是有限数值即a和b都不是无限数值、空值cmath.isfinite(x)
  • 51单片机-DS18B20(温度传感器)AT24C02(存储芯片) IIC通信-实验2-温度实时监测(可设置阈值)
  • GitLab CI_CD 从入门到实战笔记
  • 面试爱考 | 设计模式
  • 【编程基础知识】Java语言中字面字符和转义字符的区别