文章目录
- 😉毛遂自荐
- ✨题目
- 🌝解题
- 双栈
- 思路
- 代码实现
- 贪心
- 思路
- 代码实现
- 💖最后
Code皮皮虾 一个沙雕而又有趣的憨憨少年,和大多数小伙伴们一样喜欢听歌、游戏,当然除此之外还有写作的兴趣,emm…,日子还很长,让我们一起加油努力叭🌈
🚀🚀🚀话不多说,直达底部有粉丝专享福利!!!
😉毛遂自荐
毛遂自荐一下,给大家推荐一下自己的专栏😁,欢迎小伙伴们收藏关注😊
大厂面试题专栏
Java专栏
爬虫专栏
更多专栏尽在主页,点我😁!!!
✨题目
🌝解题
双栈
思路
因为题目有*
的存在,而且*
既可以为左括号,也可以为右括号或者空字符串,所以需要使用两个栈来实现
leftStack
栈存储左括号的索引,starStack
栈存储星号的索引
在遍历过程中,如果遇到右括号
- 优先匹配左括号,即对
leftStack
进行pop
- 如果
leftStack
为空,则对starStack
进行pop
- 如果
starStack
为空,说明匹配不了了,直接return false
在遍历完成之后,可能存在leftStack 和 starStack
不为空的情况,那么此时,就需要将*
当作右括号,从而对括号进行匹配。
最后,如果leftStack
为空,说明匹配完成,return true
,否则,return false
代码实现
class Solution {
public boolean checkValidString(String s) {
//存储左括号索引
Deque<Integer> leftStack = new LinkedList<>();
//存储*索引
Deque<Integer> starStack = new LinkedList<>();
int n = s.length();
for (int i = 0; i < n; i++) {
char c = s.charAt(i);
if (c == '(') {
leftStack.push(i);
} else if (c == '*') {
starStack.push(i);
} else {
if (!leftStack.isEmpty()) {
leftStack.pop();
} else if (!starStack.isEmpty()) {
starStack.pop();
} else return false;
}
}
while (!leftStack.isEmpty() && !starStack.isEmpty()) {
//把*当成右括号,但是必须右括号的索引 > 左括号才能匹配
//因为是栈结构,所以根据遍历,栈顶元素的索引是最大的索引,如果不满足就return false
if (leftStack.pop() > starStack.pop()) {
return false;
}
}
return leftStack.isEmpty();
}
}
贪心
思路
因为题目有*
的存在,而*
既可以为左括号,也可以为右括号或者空字符串
所以我们可以维护一个未匹配左括号的范围,即[min,max]
,遍历完成后,直接return min == 0
🔥怎么维护???
- 遇到左括号,则
min++ , max++
- 遇到右括号,则
min-- , max--
,如果max == 0
了,说了没有可以匹配的了,那么直接return false
- 遇到
*
号,则min-- , max++
,因为*既可以为左括号,也可以为右括号
代码实现
class Solution {
public boolean checkValidString(String s) {
int min = 0, max = 0; // 维护当前左括号的数量范围:[min, max]
char[] chars = s.toCharArray();
for(char i : chars) {
if(i == '(') {
min++;
max++;
}else if(i == ')') {
//min > 0才--
if(min > 0) min--;
if(max-- == 0) return false;
}else {
//min > 0才--
if(min > 0) min--;
max++;
}
}
return min == 0;
}
}
💖最后
我是 Code皮皮虾,一个热爱分享知识的 皮皮虾爱好者,未来的日子里会不断更新出对大家有益的博文,期待大家的关注!!!
创作不易,如果这篇博文对各位有帮助,希望各位小伙伴可以一键三连哦!,感谢支持,我们下次再见~~~
公众号干货内容输出,囊括Java、Python爬虫、力扣题解、大厂面试题 四大系列,更有长时间总结的干货资源分享,后台回复:面试资料即可领取
最后,祝各位步步高升🚀🚀🚀
粉丝福利👇🏻👇🏻👇🏻