自己编写的代码 。
自己的思路:
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();}
};