当前位置:首页 > 编程笔记 > 正文
已解决

力扣:有效的括号

来自网友在路上 186886提问 提问时间:2023-11-05 15:38:59阅读次数: 86

最佳答案 问答题库868位专家为你答疑解惑

自己编写的代码 。

自己的思路:

class Solution {
private:unordered_map<char,int>symbolValues={{'(',1},{')',2},{'{',4},{'}',5},{'[',8},{']',9},        };public:bool isValid(string s) {bool flag=false;int  lens=s.length();if (lens % 2 != 0){flag = false;}for(int i=0;i<lens;i+=2){int value = symbolValues[s[i]];int value1 = symbolValues[s[i+1]];if(value>=value1||value1-value!=1){   int n=(lens/2);               if(symbolValues[s[n]]-symbolValues[s[n-1]]!=1){flag =  false;}}}return flag;}
};

官方解答:

讲一下思路吧这里定义了一个map,都是字符类型的,对应了键和值的操作。定义了一个栈,这个栈是一个线性结构,开始遍历,目前还是不知道这里为什么用for(char ch:s),然后去搜索,得到参考文档[1]。创建一个char 的字符串类型,去遍历字符串s。这里的if(pairs.count(ch))如果

stack<char>stk 语句参考文档[2] .

这里pairs.count(ch)是此算出ch在pais.出现的次数。

如果是右括号,就返回1,左括号返回0.GPT搭的好像不是很对,然后如果是右括号,就进入如下判断,首先判断这个容器是是否为空栈或者栈顶不等于当前键和值,栈顶的元素,比如(要与)配对即stk.top() == pairs[ch] ,如果不是一对就返回false,

心得:这道题利用了栈的后进先出的原理。

 

[1]C++ for(char c:s)遍历字符串 增强型for循环_c++增强for循环_龙叙的博客-CSDN博客 

 [2]C++之Stack容器初学-CSDN博客

class Solution {
public:bool isValid(string s) {int n = s.size();if (n % 2 == 1) {return false;}unordered_map<char, char> pairs = {{')', '('},{']', '['},{'}', '{'}};stack<char> stk;for (char ch: s) {if (pairs.count(ch)) {if (stk.empty() || stk.top() != pairs[ch]) {return false;}stk.pop();}else {stk.push(ch);}}return stk.empty();}
};

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"力扣:有效的括号":http://eshow365.cn/6-32799-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!