持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情
接下来的时间里,Sivan带着大家一起学习数据结构与算法哟!
队列/栈数据结构
秒杀三道括号题
括号类的题目一般都是和栈联系在一起的。
LeetCode 20
本题可以使用栈数据结构,遇到左括号就放入,如果遇到右括号,就弹出栈比较。
class Solution {
public boolean isValid(String s) {
Stack <Character> stack = new Stack<Character>();
for(int i=0;i<s.length();i++){
char ch = s.charAt(i);
//如果是左括号,就入栈。
if(ch =='('|| ch=='{' || ch=='[' ){
stack.push(ch);
}else {
if(!stack.empty() && isoper(ch)==stack.pop()){
}else
return false;
}
}
return stack.empty();
}
public static char isoper(char c){
if(c==')') return '(';
if(c==']') return '[';
return '{';
}
}
LeetCode 921
- 使用栈解决:
class Solution {
public int minAddToMakeValid(String s) {
int ret=0;
Stack <Character> stack = new Stack <>();
for(int i=0;i<s.length();i++){
char ch = s.charAt(i);
if(ch=='('){
stack.push(ch);
}
if(ch==')' && !stack.empty()){
stack.pop();
}else if(ch==')' && stack.empty()){
ret++;
}
}
return stack.empty() ? ret:ret+stack.size();
}
}
- 使用普通变量解决:
class Solution {
public int minAddToMakeValid(String s) {
int ret = 0;
//左右括号匹配数,如果需要右括号,需求+1,存在右括号,需求-1.
int need = 0;
for(int i=0;i<s.length();i++){
char ch = s.charAt(i);
if(ch=='('){
need++;
}
if(ch==')' && need!=0){
need--;
//如果此时没有需求,说明只剩右括号了,此时ret要+1,代表匹配左括号。
}else if(ch==')' && need==0){
ret++;
}
}
return need+ret;
}
}
LeetCode 1541
class Solution {
public int minInsertions(String s) {
//need为右括号的需求量。res为主动插入语的括号。
int res = 0,need=0;
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='('){
need+=2;
//说明此时需要一个右括号。
if(need%2==1){
//插入一个右括号。
res++;
//右括号需求-1。
need--;
}
}
if(s.charAt(i)==')'){
need--;
//当need=-1,说明有一个多余的右括号,所以右括号的需求变为1,左括号需求+1.
if(need==-1){
//插入一个左括号。
res++;
need=1;
}
}
}
return res+need;
}
}
⭐写在最后⭐
博主也是边学习边写作,如有异议敬请指出~
如果喜欢这篇文章的话,别忘了给博主点一个赞和关注⭐哟!
你的关注就是对我的最大鼓励!