Skip to content

Commit a00675d

Browse files
committedOct 4, 2022
feat: add solutions to lc problems: No.0678,2116
* No.0678.Valid Parenthesis String * No.2116.Check if a Parentheses String Can Be Valid
1 parent c58c5de commit a00675d

File tree

12 files changed

+525
-320
lines changed

12 files changed

+525
-320
lines changed
 

Diff for: ‎solution/0600-0699/0678.Valid Parenthesis String/README.md

+56-105
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@
6666

6767
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为字符串 `s` 的长度。
6868

69+
相似题目:[2116. 判断一个括号字符串是否有效](/solution/2100-2199/2116.Check%20if%20a%20Parentheses%20String%20Can%20Be%20Valid/README.md)
70+
6971
<!-- tabs:start -->
7072

7173
### **Python3**
@@ -93,33 +95,22 @@ class Solution:
9395
```python
9496
class Solution:
9597
def checkValidString(self, s: str) -> bool:
96-
n = len(s)
97-
left = asterisk = 0
98-
for i in range(n):
99-
if s[i] == "(":
100-
left += 1
101-
elif s[i] == ")":
102-
if left > 0:
103-
left -= 1
104-
elif asterisk > 0:
105-
asterisk -= 1
106-
else:
107-
return False
98+
x = 0
99+
for c in s:
100+
if c in '(*':
101+
x += 1
102+
elif x:
103+
x -= 1
108104
else:
109-
asterisk += 1
110-
right = asterisk = 0
111-
for i in range(n - 1, -1, -1):
112-
if s[i] == ")":
113-
right += 1
114-
elif s[i] == "(":
115-
if right > 0:
116-
right -= 1
117-
elif asterisk > 0:
118-
asterisk -= 1
119-
else:
120-
return False
105+
return False
106+
x = 0
107+
for c in s[::-1]:
108+
if c in '*)':
109+
x += 1
110+
elif x:
111+
x -= 1
121112
else:
122-
asterisk += 1
113+
return False
123114
return True
124115
```
125116

@@ -152,39 +143,25 @@ class Solution {
152143
```java
153144
class Solution {
154145
public boolean checkValidString(String s) {
146+
int x = 0;
155147
int n = s.length();
156-
char[] a = s.toCharArray();
157-
int left = 0, asterisk = 0;
158-
for (int i = 0; i < n; i++) {
159-
if (a[i] == '(') {
160-
left++;
161-
} else if (a[i] == ')') {
162-
if (left > 0) {
163-
left--;
164-
} else if (asterisk > 0) {
165-
asterisk--;
166-
} else {
167-
return false;
168-
}
148+
for (int i = 0; i < n; ++i) {
149+
if (s.charAt(i) != ')') {
150+
++x;
151+
} else if (x > 0) {
152+
--x;
169153
} else {
170-
asterisk++;
154+
return false;
171155
}
172156
}
173-
int right = 0;
174-
asterisk = 0;
175-
for (int i = n - 1; i >= 0; i--) {
176-
if (a[i] == ')') {
177-
right++;
178-
} else if (a[i] == '(') {
179-
if (right > 0) {
180-
right--;
181-
} else if (asterisk > 0) {
182-
asterisk--;
183-
} else {
184-
return false;
185-
}
157+
x = 0;
158+
for (int i = n - 1; i >= 0; --i) {
159+
if (s.charAt(i) != '(') {
160+
++x;
161+
} else if (x > 0) {
162+
--x;
186163
} else {
187-
asterisk++;
164+
return false;
188165
}
189166
}
190167
return true;
@@ -221,36 +198,24 @@ public:
221198
class Solution {
222199
public:
223200
bool checkValidString(string s) {
224-
int n = s.size();
225-
int left = 0, asterisk = 0;
201+
int x = 0, n = s.size();
226202
for (int i = 0; i < n; ++i) {
227-
if (s[i] == '(') {
228-
++left;
229-
} else if (s[i] == ')') {
230-
if (left > 0)
231-
--left;
232-
else if (asterisk > 0)
233-
--asterisk;
234-
else
235-
return false;
203+
if (s[i] != ')') {
204+
++x;
205+
} else if (x) {
206+
--x;
236207
} else {
237-
++asterisk;
208+
return false;
238209
}
239210
}
240-
int right = 0;
241-
asterisk = 0;
211+
x = 0;
242212
for (int i = n - 1; i >= 0; --i) {
243-
if (s[i] == ')') {
244-
++right;
245-
} else if (s[i] == '(') {
246-
if (right > 0)
247-
--right;
248-
else if (asterisk > 0)
249-
--asterisk;
250-
else
251-
return false;
213+
if (s[i] != '(') {
214+
++x;
215+
} else if (x) {
216+
--x;
252217
} else {
253-
++asterisk;
218+
return false;
254219
}
255220
}
256221
return true;
@@ -283,38 +248,24 @@ func checkValidString(s string) bool {
283248

284249
```go
285250
func checkValidString(s string) bool {
286-
n := len(s)
287-
left, asterisk := 0, 0
288-
for i := 0; i < n; i++ {
289-
if s[i] == '(' {
290-
left++
291-
} else if s[i] == ')' {
292-
if left > 0 {
293-
left--
294-
} else if asterisk > 0 {
295-
asterisk--
296-
} else {
297-
return false
298-
}
251+
x := 0
252+
for _, c := range s {
253+
if c != ')' {
254+
x++
255+
} else if x > 0 {
256+
x--
299257
} else {
300-
asterisk++
258+
return false
301259
}
302260
}
303-
asterisk = 0
304-
right := 0
305-
for i := n - 1; i >= 0; i-- {
306-
if s[i] == ')' {
307-
right++
308-
} else if s[i] == '(' {
309-
if right > 0 {
310-
right--
311-
} else if asterisk > 0 {
312-
asterisk--
313-
} else {
314-
return false
315-
}
261+
x = 0
262+
for i := len(s) - 1; i >= 0; i-- {
263+
if s[i] != '(' {
264+
x++
265+
} else if x > 0 {
266+
x--
316267
} else {
317-
asterisk++
268+
return false
318269
}
319270
}
320271
return true

0 commit comments

Comments
 (0)