现有一串(,),[,],{,}的字符串s。要判断这串字符串是不是一串有效的组合。如[]{()}是遗传有效的组合。[)[]}是一串无效的组合。
这个问题的解法不难,只要用一个stack就可以了,我们把s里面的字符一个一个过一遍。主要分为2种情况
1 如果我们遇到 ( [ { 里面的一个,我们就把这个字符放入stack里面。
2 如果我们遇到 ) ] } 里面的一个,我们就把这个字符和stack最顶端的字符进行比较
(a) 如果遇到的字符和stack顶端字符相等,我们把stack顶端的字符去掉,然后继续比较字符串的下一个
(b) 如果遇到的字符和stack顶端的不相等,我们就返回false。
bool isValid(string s)
{
stack<char> parenthese;
for(int i=0; i<s.size(); i++){
if(s[i]=='(' || s[i]=='[' || s[i]=='{') //压栈
parenthese.push_back(s[i]);
else{
if(parenthese.empty()) return false;
if(s[i]==')' && parenthese.top()!='(') return false; //取栈顶元素进行比较
if(s[i]==']' && parenthese.top()!='[') return false;
if(s[i]=='}' && parenthese.top()!='{') return false;
parenthese.pop(); //更新栈顶元素
}
}
return true;
}
reference: