掘金团队号上线,助你 Offer 临门! 点击 查看详情 (opens new window)
# 前言
第一次参加掘金打卡活动,别的不说 主要是奔着奖励来的。4.12开始为了达到14题小目标 冲冲冲!!!这是第六题。(题外话:这些文章其实都是晚上的时候写好 然后存在草稿箱 等第二天再点发布 比如今天打卡5和6 其实我草稿箱已经在写7和8了)
# 题目描述
题目描述我用截图leetcode的为主,所以题目如下图
# 思路分析
题目解析:首先括号是成对的,有点像连连看的感觉 要可以成功消除就是有效的 碰到不能成功消除则是无效的,而且要先有左括号,然后一定要满足对应右括号是接下来一位或者最后一位才可消除
实现如下:
运行错误了 因为当字符为
"(([]){})"
不能成功消除,好的我的算法在碰到第二个'('
的时候会找不到')'
看来我还是没考虑清楚题意,需要重新思考一下,采用空数组去存着等待消除,首先依次遍历字符串(for...of) 碰到左括号,就把这个类型的右括号记录下来(依次存进数组),当碰到右括号要和数组的末尾相等,不等则是不可消除的,相等即消除成功,遍历结束后数组里没有任何类型的右括号,则为消除成功。
# AC 代码
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var isValid = function(s) {
if(!s||s.length%2!=0){
return false
}
let obj = {
'(': ')',
'[': ']',
'{': '}'
}
let arr = []
for(let i of s){
if(obj[i]){
arr.push(i)
}else {
if(i != obj[arr.pop()]){
return false;
}
}
}
return !arr.length
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 总结
坚持就是胜利。第六题算法完成,坚持就是胜利!!!
↓↓↓
↑↑↑
这里可以点!这里可以点!这里可以点!