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;
}