?12.括號匹配
20. 有效的括號 - 力扣(LeetCode)
?
解題思路:該題比較簡單,是對棧特性很好的應用,具體操作如下:循環遍歷String中的字符,逐個取到每個括號,如果該括號是:1.?左括號,直接入棧2.?右括號,與棧頂的左括號進行匹配,如果不匹配直接返回false否則繼續循環循環結束后,如果棧空則匹配,否則左括號比右括號多肯定不匹配
bool isValid(char * s){// oj題目給的提示:1 <= s.length <= 104 說明s中一定是有字符串的 不考慮空串或者s為空的情況int size = strlen(s);Stack st;StackInit(&st);bool isMatch = true;for(int i = 0; i < size; ++i){// 如果是左括號則入棧if(('(' == s[i]) || ('[' == s[i]) || ('{' == s[i])){StackPush(&st, s[i]);}else{// 拿到的是右括號// 此時: 需要從棧頂獲取左括號來檢測是否匹配// 注意:一定要保證棧中有元素才可以獲取棧頂元素if(StackEmpty(&st)){//StackDestroy(&st);//return false;isMatch = false;break;}char top = StackTop(&st);if((top == '(' && s[i] == ')') ||(top == '[' && s[i] == ']') ||(top == '{' && s[i] == '}')){StackPop(&st);}else{// 沒有匹配// StackDestroy(&st);// return false;isMatch = false;break;}}}// 如果完全匹配,則循環結束時,棧一定是空的// 否則說明:左括號比右括號多if(!StackEmpty(&st)){//StackDestroy(&st);//return false;isMatch = false;}StackDestroy(&st);return isMatch;
}
?