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

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

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

相关文章
|
6月前
|
存储
【剑指offer】-左旋转字符串-41/67
【剑指offer】-左旋转字符串-41/67
|
6月前
|
数据安全/隐私保护 C++ 索引
【一刷《剑指Offer》】面试题 4:替换空格
【一刷《剑指Offer》】面试题 4:替换空格
【每日一题】4.LeetCode——杨辉三角
【每日一题】4.LeetCode——杨辉三角
|
6月前
|
Java
每日一刷《剑指offer》字符串篇之左旋转字符串
每日一刷《剑指offer》字符串篇之左旋转字符串
55 0
每日一刷《剑指offer》字符串篇之左旋转字符串
|
存储
每日一题——螺旋矩阵
每日一题——螺旋矩阵
|
机器学习/深度学习 C++
剑指offer 66. 左旋转字符串
剑指offer 66. 左旋转字符串
77 0
|
Java Python
左旋转字符串(剑指offer 58-II)
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
|
算法 Java
左旋转字符串 (剑指Offer58-II)
左旋转字符串 (剑指Offer58-II)
110 0