『牛客|每日一题』有效括号序列

简介: 基础算法无论在研究生面试还是求职面试都是十分重要的一环,这里推荐一款算法面试神器:牛客网-面试神器;算法题只有多刷勤刷才能保持思路与手感,大家赶紧行动起来吧(温馨提示:常见的面试问答题库也很nice哦 https://www.nowcoder.com/link/pc_csdncpt_ll_sf


🍁每日推荐:

如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦

『牛客|每日一题』有效括号序列

1.每日一题

网络异常,图片无法展示
|

2.方法1:左括号入栈

2.1思路分析

遍历字符串,遇到'(','{','['这三种字符的时候,将字符入栈stk;而遇到')','}',']'这三种字符的时候则让对应的匹配字符出栈。具体规则如下:

  • step 1:引入辅助栈stk,遍历字符串,每次遇到'(','{','['字符的时候将字符入栈stk
  • step 2:当遇到')','}',']'字符的时候,则检查栈是否空,且顶元素是否为匹配元素(如{和}匹配等),如果栈空或者栈顶元素不为匹配元素则括号序列不合法
  • step 3:当栈非空,且栈顶元素为匹配元素,则栈顶元素出栈。
  • step 4:循环匹配字符串,直到每次字符处理完
  • step 5:检查栈stk是否为空,栈为空则序列合法,否则不合法(当括号以正确顺序关闭时则最后的栈为空)

2.2核心代码

importjava.util.*;

publicclassSolution {

   /**

    * @param s string字符串

    * @return bool布尔型

    */

   publicbooleanisValid (Strings) {

       // write code here

       Stack<Character>stk=newStack<Character>();

       intl=s.length();

       for(inti=0;i<l;++i){

           chara=s.charAt(i);

           if(a=='('||a=='['||a=='{')stk.push(a);

           if(a==')'){

               if(stk.isEmpty()||stk.peek()!='(') returnfalse;

               stk.pop();

               continue;

           }

           if(a==']'){

               if(stk.isEmpty()||stk.peek()!='[')returnfalse;

               stk.pop();

               continue;

           }

           if(a=='}'){

               if(stk.isEmpty()||stk.peek()!='{')returnfalse;

               stk.pop();

               continue;

           }

       }

       returnstk.isEmpty()?true:false;

   }

}

网络异常,图片无法展示
|

3.方法2:右括号入栈

3.1思路分析

 仍然是遍历字符串,借助辅助栈

  • step 1:当遇到'(','[','{'这三种字符的时候则让对应的匹配字符入栈(分别对应')',']','}')
  • step 2:当出现的字符不是'(','[','{'这三种字符时,则先判断栈是否为空或者当前字符是否与栈顶元素一样,
  • step 3:当栈空或者当前字符与栈顶字符不一样时,则括号序列不合法,直接返回;
  • step 4:否则栈顶元素出栈。遍历字符串直到所有元素遍历完成。最后判断栈是否为空,不为空则括号序列不合法;否则为合法序列。

3.2核心代码

importjava.util.Stack;

 

publicclassSolution {

   publicbooleanisValid(Strings) {

        Stack<Character>stack=newStack<Character>();

        //使用foreach循环

        for (charc : s.toCharArray()) {

            if (c=='(')

                stack.push(')');

            elseif (c=='{')

                stack.push('}');

            elseif (c=='[')

                stack.push(']');

            elseif (stack.isEmpty() ||stack.pop() !=c)

                returnfalse;

        }

        returnstack.isEmpty();

    }

}

网络异常,图片无法展示
|

📚订阅专栏:『牛客刷题集锦』

🍁每日推荐:基础算法无论在研究生面试还是求职面试都是十分重要的一环,这里推荐一款算法面试神器:牛客网-面试神器;算法题只有多刷勤刷才能保持思路与手感,大家赶紧行动起来吧(温馨提示:常见的面试问答题库也很nice哦)

如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦

相关文章
|
1月前
|
机器学习/深度学习 算法
leetcode51N皇后刷题打卡
leetcode51N皇后刷题打卡
32 0
|
4天前
|
算法
OJ刷题:杨氏矩阵
OJ刷题:杨氏矩阵
6 0
|
1月前
|
数据安全/隐私保护 C++ 索引
【一刷《剑指Offer》】面试题 4:替换空格
【一刷《剑指Offer》】面试题 4:替换空格
【每日一题】4.LeetCode——杨辉三角
【每日一题】4.LeetCode——杨辉三角
|
1月前
|
Java
每日一刷《剑指offer》字符串篇之左旋转字符串
每日一刷《剑指offer》字符串篇之左旋转字符串
41 0
每日一刷《剑指offer》字符串篇之左旋转字符串
leetcode 315周赛 解题报告
leetcode 315周赛 解题报告
46 0
|
存储
每日一题——螺旋矩阵
每日一题——螺旋矩阵