题目描述:有效括号
算法思想:运用栈的思想,若括号匹配则将栈中对应元素pop出来,否则将该元素入栈
int opposite(vector<int>& num,int n){
for(int i=num.size()-1;i>=0;--i){
if(num[i]==-n)
return i;
}
return -1;
}
bool isValid(string s){
if(s.empty())
return true;
if(s.size()%2!=0)
return false;
vector<int> num;
int index=0;
int couple=0;
for(int i=0;i!=s.size();++i){
if(s[i]=='(') index=1;
if(s[i]==')') index=-1;
if(s[i]=='[') index=2;
if(s[i]==']') index=-2;
if(s[i]=='{') index=3;
if(s[i]=='}') index=-3;
int oppo=opposite(num,index);
if(oppo==-1){
if(index<0) return false;
num.push_back(index);
}
else if(index<0){
for(int j=oppo;j<num.size();++j)
num[j]=0;
}
}
for(auto i:num){
if(i!=0) return false;
}
return true;
}
int main(int argc,char** argv){
if(isValid("[(({})}]"))
cout<<"true"<<endl;
else
cout<<"false"<<endl;
system("pause");
return 0;
}