LeetCode20. Valid Parentheses

38 篇文章 0 订阅

Given a string containing just the characters ‘(‘, ‘)’, ‘{‘, ‘}’, ‘[’ and ‘]’, determine if the input string is valid.

The brackets must close in the correct order, “()” and “()[]{}” are all valid but “(]” and “([)]” are not.
1、6ms

#include<string>
#include<math.h>
#include<list>
#include<map>
#include<iostream>
using namespace std;

class Solution {
public:
    bool isValid(string s) {
        int n=s.length();
        if(n==0) {return true;}
        if(n%2)  {return false;}
        list<char> L;
        for(int i=0;i<n;++i){
            L.push_back(s[i]);
        }
        list<char>::iterator p1=L.begin();
        list<char>::iterator p2=++L.begin();
        char Left[3]  ={'(','{','['};
        char Right[3] ={')','}',']'};
        map<char,char> m;
        m[Left[0]]=Right[0];
        m[Left[1]]=Right[1];
        m[Left[2]]=Right[2];
        while((L.empty())==false){
            if((*p2)==m[*p1]){
                p2++;
                L.erase(p1,p2);
                if((L.size()>=2)&&(p2==L.begin())&&(p2!=L.end())){
                    p1=p2;
                    p2++;           
                }
                else if((L.size()>=2)&&(p2!=L.begin())&&(p2!=L.end())){
                    p1=--p2;
                    p2++; 
                }
            }
            else if((*p2)==')'||(*p2)=='}'||(*p2)==']'||(p2==(--L.end()))){
                return false;
            }
            else{
                p1++;
                p2++;

            }
        }
        return true;
    }
};

void main(){
    string s="(({)}())";
    Solution So;
    bool r=So.isValid(s);
    cout<<r<<endl;
}

2、3ms

#include<string>
#include<stack>
#include<iostream>
using namespace std;

class Solution {
public:
    bool isValid(string s) {
        int n=s.length();
        if(n%2) {return false;}
        stack<char> left_char;
        for(int i=0;i<n;++i){
            if(s[i]=='('||s[i]=='{'||s[i]=='['){
                left_char.push(s[i]);
            }
            else
            {
                if(left_char.empty()){return false;}
                else{
                    char top_char=left_char.top();
                    if(((top_char=='(')&&(s[i]==')'))||((top_char=='{')&&(s[i]=='}'))||((top_char=='[')&&(s[i]==']'))){
                        left_char.pop();
                    }
                    else
                    {
                      return false;
                    }               
                }                   
            }
        }
        if(left_char.empty()){return true;}
        else{return false;}
    }
};
void main(){
    string s="())";
    Solution So;
    bool r=So.isValid(s);
    cout<<r<<endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值