Leetcode(20)有效的括號
阿新 • • 發佈:2018-11-27
題目描述
給定一個只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字串,判斷字串是否有效。
有效字串需滿足:
左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。
示例 1:
輸入: “()”
輸出: true
示例 2:
輸入: “()[]{}”
輸出: true
示例 3:
輸入: “(]”
輸出: false
示例 4:
輸入: “([)]”
輸出: false
示例 5:
輸入: “{[]}”
輸出: true
解題思路
說實話看到這個 我第一印象是利用堆疊的知識,可以將括號分為兩類,一類是左括號,一類是右括號,使括號字串依次入棧,最開始肯定是左括號,然後依次入棧,如果是右括號的話,檢查堆疊裡面前一個是否匹配,如果匹配的話,將前一個出棧,檢查下一個,直到讀取完最後的一個,檢查堆疊的大小,如果為零,證明全部匹配,如果不為零,證明不匹配。
程式碼如下
class Solution { public: bool isValid(string s) { int tagVal[256]; tagVal['('] = 1; tagVal['['] = 2; tagVal['{'] = 3; tagVal[')'] = 4; tagVal[']'] = 5; tagVal['}'] = 6; int num = s.size(); if (s.size() % 2 != 0) return false; int i = 0; for (; i<s.size(); i++) { if (tagVal[s[i]] >= 4 && tagVal[s[i]] <= 6 && tagVal[s[i]] == tagVal[s[i - 1]]+3) { s.erase(i,1); s.erase(i - 1,1); //cout << s << endl; i-=2; } } //cout << s << endl; if (s == "") return true; else return false; } };
看了一下網上的各種解法,發現思路是基本一樣的,都是將其看成堆疊的形式進行求解的