NC52 有效括号序列【牛客网】
文章目录
- 零、原题链接
- 一、题目描述
- 二、测试用例
- 三、解题思路
- 四、参考代码
零、原题链接
NC52 有效括号序列
一、题目描述
二、测试用例
三、解题思路
- 基本思路:
使用栈进行括号匹配 - 具体思路:
- 构建括号和数字映射,这样后面就不用写一堆
if
条件 - 遍历括号序列,
- 如果遇到的值大于
0
,则表示是左括号,压入栈; - 如果遇到的值小于
0
,则表示是右括号,出栈元素,- 如果栈空,则表示不存在左括号进行匹配;返回
false
; - 否则,判断相加是否互为相反数,是则表示括号匹配,否则,不匹配,返回
false
;
- 如果栈空,则表示不存在左括号进行匹配;返回
- 如果遇到的值大于
- 判读栈是否为空,为空则表示全部匹配,如果不为空,则表示左括号多了;
- 构建括号和数字映射,这样后面就不用写一堆
四、参考代码
时间复杂度: O ( n ) \Omicron(n) O(n)
空间复杂度: O ( n ) \Omicron(n) O(n)
#include <unordered_map>
#include <vector>
class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param s string字符串* @return bool布尔型*/bool isValid(string s) {vector<char> _stack(s.length());unordered_map<char, int> m = {{'(', 1}, {'{', 2}, {'[', 3}, {')', -1}, {'}', -2}, {']', -3}};int k = 0;for (int i = 0; i < s.length(); i++) {if (m[s[i]] > 0)_stack[k++] = s[i];else {if (k == 0)return false;if (m[_stack[k - 1]] == -m[s[i]])k--;elsereturn false;}}return k == 0;}
};