Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.
An input string is valid if:
- Open brackets must be closed by the same type of brackets.
- Open brackets must be closed in the correct order.
Note that an empty string is also considered valid.
Example 1:
Input: "()" Output: true
Example 2:
Input: "()[]{}" Output: true
Example 3:
Input: "(]" Output: false
Example 4:
Input: "([)]" Output: false
Example 5:
Input: "{[]}" Output: true
Accepted
686,136
Submissions
1,844,995
利用栈的思想,不用stl当中的stack是因为环境有问题,vector模拟一下。
#include <iostream>
#include <string.h>
#include <vector>
using namespace std;
/*
* ([{
* }])
*
*/
bool isValid(string s){
const char *str = s.c_str();
int len = strlen(str);
cout<<"len:"<<len<<endl;
if(len%2!=0){
return false;
}
vector<char> vec_a;
for(int i=0;i<len;i++){
if(str[i]=='(' ||
str[i]=='[' ||
str[i]=='{'){
vec_a.push_back(str[i]);
}
else{
if(vec_a.size()==0)
return false;
char a_last =*(vec_a.end()-1);
if(a_last != '(' && str[i]==')')
return false;
else if(a_last != '[' && str[i]==']')
return false;
else if(a_last != '{' && str[i]=='}')
return false;
vec_a.pop_back();
}
}
return vec_a.empty();
}
// if(vec_a.size()!=vec_b.size()){
// return false;
// }
// cout<<"get in next"<<endl;
// int len = vec_a.size();
// vector<char>::iterator it_a = vec_a.begin();
// vector<char>::iterator it_b = vec_b.end()-1;
// while(len--){
// cout<<"a:"<<*it_a<<endl;
// cout<<"b:"<<*it_b<<endl;
// if((*it_a == '(' && *it_b==')') ||
// (*it_a == '[' && *it_b==']') ||
// (*it_a == '{' && *it_b=='}')){
// it_a++;
// it_b--;
// }else{
// cout<<"erro in while"<<endl;
// return false;
// }
// }
int main(){
char *s1 = "{([])}";
char *s2 = "()[]{}";
char *s3 = "){";
char *s4 = "";
char *s5 = "((";
bool res = isValid(s5);
if(res){
cout<<"1"<<endl;
}else{
cout<<"0"<<endl;
}
return 0;
}