File tree 1 file changed +108
-0
lines changed
1 file changed +108
-0
lines changed Original file line number Diff line number Diff line change
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
+
You can’t perform that action at this time.
0 commit comments