7.29之單鏈表兩數相加
阿新 • • 發佈:2020-07-29
20. 有效的括號
給定一個只包括 '(',')','{','}','[',']' 的字串,判斷字串是否有效。 有效字串需滿足:1.左括號必須用相同型別的右括號閉合。
2.左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。 示例 1: 輸入: "()"
輸出: true
示例 2: 輸入: "()[]{}"
輸出: true
示例 3: 輸入: "(]"
輸出: false
示例 4: 輸入: "([)]"
輸出: false
示例 5: 輸入: "{[]}"
輸出: true 思路: 利用棧後進先出的特性。遇到左括號將其壓入棧中,遇到右括號從棧中取出最上面的元素進行比較,若不匹配,返回false。全部字元遍歷完,棧應該為空。為使程式碼簡潔應該利用字典,建立左右括號的對映。 程式碼:
classSolution { public: bool isValid(string s) { if(s.length()%2)//因配對需要,length 應為偶數(包括0) return 0; unordered_map<char, char> mp; mp[')'] = '('; mp[']'] = '['; mp['}'] = '{'; stack<char> st; char c; int i; for(i = 0; i < s.length(); i++) { unordered_map<char, char>::iterator it = mp.find(s[i]); if(it==mp.end()) st.push(s[i]); else { if(st.empty()) return 0; c = st.top(); st.pop();if(it->second != c) return 0; } } return st.empty(); } };