友情支持
如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜
|
|
有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。

公众号的微信号是: jikerizhi。因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。 |
678. 有效的括号字符串
给你一个只包含三种字符的字符串,支持的字符类型分别是 (、) 和 *。请你检验这个字符串是否为有效字符串,如果是 *有效* 字符串返回 true。
有效 字符串符合如下规则:
-
任何左括号
(必须有相应的右括号)。 -
任何右括号
)必须有相应的左括号(。 -
左括号
(必须在对应的右括号之前)。 -
*可以被视为单个右括号),或单个左括号(,或一个空字符串""。
示例 1:
输入:s = "()" 输出:true
示例 2:
输入:s = "(*)" 输出:true
示例 3:
输入:s = "(*))" 输出:true
提示:
-
1 <= s.length <= 100 -
s[i]为(、)或*
思路分析
题目简单,但是解法却有些难想,尤其是贪心的解法。
-
一刷
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* @author D瓜哥 · https://www.diguage.com
* @since 2026-05-08 21:35:40
*/
public boolean checkValidString(String s) {
int min = 0, max = 0;
for (char c : s.toCharArray()) {
if (c == '(') {
min++;
max++;
} else if (c == ')') {
min = Math.max(min - 1, 0);
max--;
if (max < 0) {
return false;
}
} else {
min = Math.max(min - 1, 0);
max++;
}
}
return min == 0;
}

