Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 1e1a533

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

File tree

1 file changed

+108
-0
lines changed

1 file changed

+108
-0
lines changed
Lines changed: 108 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /