Skip to content

Commit 1e1a533

Browse files
committed
add LeetCode 1249. 移除无效的括号
1 parent ed47d78 commit 1e1a533

File tree

1 file changed

+108
-0
lines changed

1 file changed

+108
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L2doL2Nob2NvbGF0ZTE5OTkvY2RuL2ltZy8yMDIwMDgyODE0NTUyMS5qcGc?x-oss-process=image/format,png)
2+
>仰望星空的人,不应该被嘲笑
3+
4+
## 题目描述
5+
给你一个由` '('``')'` 和小写字母组成的字符串 `s`
6+
7+
你需要从字符串中删除最少数目的 `'('` 或者 `')' `(可以删除任意位置的括号),使得剩下的「括号字符串」有效。
8+
9+
请返回任意一个合法字符串。
10+
11+
有效「括号字符串」应当符合以下 任意一条 要求:
12+
13+
空字符串或只包含小写字母的字符串
14+
可以被写作 `AB`(A 连接 B)的字符串,其中 `A``B` 都是有效「括号字符串」
15+
可以被写作 (A) 的字符串,其中 `A` 是一个有效的「括号字符串」
16+
17+
18+
示例 1:
19+
20+
```javascript
21+
输入:s = "lee(t(c)o)de)"
22+
输出:"lee(t(c)o)de"
23+
解释:"lee(t(co)de)" , "lee(t(c)ode)" 也是一个可行答案。
24+
```
25+
26+
示例 2:
27+
28+
```javascript
29+
输入:s = "a)b(c)d"
30+
输出:"ab(c)d"
31+
```
32+
33+
示例 3:
34+
35+
```javascript
36+
输入:s = "))(("
37+
输出:""
38+
解释:空字符串也是有效的
39+
```
40+
41+
示例 4:
42+
43+
```javascript
44+
输入:s = "(a(b(c)d)"
45+
输出:"a(b(c)d)"
46+
```
47+
48+
49+
50+
提示:
51+
52+
```javascript
53+
1 <= s.length <= 10^5
54+
s[i] 可能是 '('')' 或英文小写字母
55+
```
56+
57+
来源:力扣(LeetCode)
58+
链接:https://leetcode-cn.com/problems/minimum-remove-to-make-valid-parentheses
59+
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
60+
61+
62+
## 解题思路
63+
一开始我是想着只要对应括号匹配就好了,将多余的右括号删掉,但是这个样例 `))((` 不可能过的,因为左括号也可以不匹配呀。于是我想着将括号对应字符串索引存起来,起初我们可以将不匹配的右括号还是按原来方法删掉就好了,匹配一个就删掉一个对应左括号的索引值,最后多出来的索引值全删掉就好了,这样就不会出现左括号还余留的情况。
64+
65+
这里提示一下:不要用 `splice`去删除指定下标的元素,`splice`会改变原数组长度,而你原本存的下标是基于原数组的。
66+
`delete`方法不会改变数组长度,但删除的那个位置会变成`'undefined'`,所以我们用`fliter`方法过滤一遍出有效值 `arr=arr.filter(item=>item)`
67+
68+
最后通过 `res.join('')` 方法,将数组转换成我们最后要的字符串即可。
69+
70+
```javascript
71+
var minRemoveToMakeValid = function(s) {
72+
let res = [...s]
73+
let stack = []
74+
for(let i=-0;i<s.length;i++){
75+
let ch = s[i]
76+
if(ch === '('){
77+
stack.push(i)
78+
}else if(ch === ')'){
79+
if(stack.length) stack.pop()
80+
else delete(res[i])
81+
}
82+
}
83+
while(stack.length){
84+
let idx = stack.pop()
85+
delete(res[idx])
86+
}
87+
res = res.filter(item=>item)
88+
return res.join('')
89+
};
90+
```
91+
92+
93+
94+
## 最后
95+
文章产出不易,还望各位小伙伴们支持一波!
96+
97+
往期精选:
98+
99+
<a href="https://github.com/Chocolate1999/Front-end-learning-to-organize-notes">小狮子前端の笔记仓库</a>
100+
101+
<a href="https://yangchaoyi.vip/">访问超逸の博客</a>,方便小伙伴阅读玩耍~
102+
103+
![](https://img-blog.csdnimg.cn/2020090211491121.png#pic_center)
104+
105+
```javascript
106+
学如逆水行舟,不进则退
107+
```
108+

0 commit comments

Comments
 (0)