力扣:有效的括号-LMLPHP

自己编写的代码 。

自己的思路:

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,

力扣:有效的括号-LMLPHP

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

 

[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();
    }
};
11-04 20:11