用一个栈存储字符串中的括号,每次读新的字符的时候,如果在栈顶发现有与它相匹配的括号,则从栈顶弹出,否则入栈。一次遍历之后,如果发现栈不为空,说明不匹配。
1 bool isValid(string s) { 2 // Start typing your C/C++ solution below 3 // DO NOT write int main() function 4 stack<char> aStack; 5 int i, l = s.length(); 6 for(i = 0; i < l; i++){ 7 if(s[i] == '(' || s[i] == '[' || s[i] == '{') 8 aStack.push(s[i]); 9 else if(s[i] == ')'){ 10 if(!aStack.empty() && aStack.top() == '(') 11 aStack.pop(); 12 else { 13 aStack.push(s[i]); 14 break; 15 } 16 } 17 else if(s[i] == ']'){ 18 if(!aStack.empty() && aStack.top() == '[') 19 aStack.pop(); 20 else { 21 aStack.push(s[i]); 22 break; 23 } 24 } 25 else if(s[i] == '}'){ 26 if(!aStack.empty() && aStack.top() == '{') 27 aStack.pop(); 28 else { 29 aStack.push(s[i]); 30 break; 31 } 32 } 33 } 34 if(aStack.empty()) 35 return true; 36 return false; 37 }