20. 有效的括号
20. 有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1:
输入: "()"
输出: true
输出: true
示例 2:
输入: "()[]{}"
输出: true
输出: true
示例 3:
输入: "(]"
输出: false
输出: false
示例 4:
输入: "([)]"
输出: false
输出: false
示例 5:
输入: "{[]}"
输出: true
输出: true
思路:
利用栈后进先出的特性。遇到左括号将其压入栈中,遇到右括号从栈中取出最上面的元素进行比较,若不匹配,返回false。全部字符遍历完,栈应该为空。为使代码简洁应该利用字典,建立左右括号的映射。时间复杂度o(n),空间复杂度o(n)。
代码:
class Solution { 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(); } };
posted on 2020-07-30 10:10 Little-Prince 阅读(164) 评论(0) 收藏 举报
浙公网安备 33010602011771号