LeetCode20. 有效的括号(栈的使用-括号匹配题)
之前在区块链面试中也遇到过,今天又看到它了,就简单记录一下吧。
代码如下:
1 // 2 // Created by tusxxw on 2020/7/17. 3 // 4 /** 5 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 6 7 有效字符串需满足: 8 9 左括号必须用相同类型的右括号闭合。 10 左括号必须以正确的顺序闭合。 11 注意空字符串可被认为是有效字符串。 12 13 示例 1: 14 15 输入: "()" 16 输出: true 17 示例 2: 18 19 输入: "()[]{}" 20 输出: true 21 22 来源:力扣(LeetCode) 23 链接:https://leetcode-cn.com/problems/valid-parentheses 24 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 25 */ 26 27 #include <string> 28 #include <iostream> 29 30 using namespace std; 31 32 class Solution { 33 public: 34 bool isValid(string s) { 35 const int len = s.size(); 36 int rear = len -1; 37 int stack[len+2];//栈 简单题自己就数组模拟栈比STL中的stack要省时间的多 38 int top = 0; 39 for (int i = 0; i < len; ++i) { 40 //如果等于左括号就压栈 41 if(s[i] == '(' || s[i] == '[' || s[i] == '{') { 42 stack[top++] = s[i];//压栈 43 }else if(s[i] == ')') { 44 if(top == 0) return false; 45 if(stack[top-1] == '('){ 46 top--; 47 } else { 48 return false; 49 } 50 }else if(s[i] == ']') { 51 if(top == 0) return false; 52 if(stack[top-1] == '['){ 53 top--; 54 } else { 55 return false; 56 } 57 }else if(s[i] == '}') { 58 if(top == 0) return false; 59 if(stack[top-1] == '{'){ 60 top--; 61 } else { 62 return false; 63 } 64 } 65 } 66 if(top == 0) { 67 return true; 68 }else { 69 return false; 70 } 71 } 72 }; 73 int main(){ 74 Solution s; 75 bool res = s.isValid("()()[]{}"); 76 cout<<res; 77 return 0; 78 }