给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例 1:
输入:s = "()" 输出:true
示例 2:
输入:s = "()[]{}" 输出:true
示例 3:
输入:s = "(]" 输出:falseclass Solution { public: bool isValid(string s) { if((s.size() & 1) == 1)return false; // 因为括号是两两配对,因此奇数长度的字符串一定是不匹配的 unordered_map<char, char> buckets{{'(', ')'}, {'[', ']'}, {'{', '}'}}; // 存储不同的左右括号映射 stack<char> st; // 存储所有的左括号 for(char bucket: s){ if(buckets.count(bucket)){ st.push(bucket); // 如果为左括号,入栈,等待对应的右括号来匹配 }else if(st.empty() || bucket != buckets[st.top()]){ return false; // 否则为右括号,如果当前栈为空没有内容匹配或者栈顶左括号不匹配,返回false }else{ st.pop(); // 否则匹配一对括号,弹出栈顶元素 } } return st.empty(); // 所有左括号都匹配完则匹配成功 } }; 标签:2023.09,false,示例,bucket,28,st,括号,匹配 From: https://www.cnblogs.com/dmx-03/p/17736638.html