Leetcode 20. 有效的括号'(',')','{','}','[',']'

75 阅读1分钟

20. 有效的括号 - 力扣(LeetCode)

刚开始我以为就是单纯的去比较前后两个字符是否相同就可以了,于是写了如下代码。

class Solution {
public:
    bool isValid(string s) {


for(int i=0;i<s.size();i++)
{
   if( strcmp(s[i],s[i+1])==0)return true;

    else
    {
        return false;
    }

}


return true;
    }
};

但是我忽略了万一测试用例中有除了'('')''{''}''['']'之外的字符,那么即便是前后两个字符值相同,那也通不过。 例如< >

所以我们应该把'('')''{''}''['']'这几个词写出来,和测试用例给的字符串做对比。

同时我们可以再把这几个字符串中左括号{ [ (提取出来进栈。

改完之后: 思路来源: 20. 有效的括号 - 力扣(LeetCode)

class Solution {
public:

bool isJUDE(char& left,char& right)
{
    if(left=='{' && right=='}')return true;
    else   if(left=='[' && right==']')return true;
    else   if(left=='(' && right==')')return true;
    else   return false;

}
    bool isValid(string s) {

 int s_len = s.length();
        //s的长度为奇数,一定是非法的
        if (s_len % 2 != 0) {
            return false;
        } 

stack <char> st;
 

//如果遇到{ ,[ ,( 就压入栈。

for(auto str:s)
{
if(str=='{'||str=='['||str=='(')st.push(str);
else if(!st.empty()&&isJUDE(st.top(),str))

    //对比
    st.pop();
    

else return false;



}

if(st.empty())
{
    return true;
}
return false;

    }
};