0001 bool paren(const char A[], Rank n) { 0002 Stack<char> S; //记录已发现,但尚未匹配的左括号 0003 for (Rank i = 0; i < n; i++) //一趟顺序扫描 0004 switch (A[i]) { //左括号无论何种,一律进栈;右括号必须与栈顶左括号同类 0005 case '(': case '[': case '{': S.push(A[i]); break; 0006 case ')': if (S.empty() || '(' != S.pop()) return false; break; 0007 case ']': if (S.empty() || '[' != S.pop()) return false; break; 0008 case '}': if (S.empty() || '{' != S.pop()) return false; break; 0009 } 0010 return S.empty(); //最终栈空,当且仅当匹配 0011 } //paren, O(n)