LeetCode150道面试经典题-- 有效的括号(简单)

1.题目

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

2.示例

示例 1:

输入:s = "()"

输出:true

示例 2:

输入:s = "()\[\]{}"

输出:true

示例 3:

输入:s = "(]"

输出:false

提示:

  • 1 <= s.length <= 104
  • s 仅由括号 '()[]{}' 组成

3.思路

首先需要找规律,第一如果该字符串个数为奇数那么绝对是无效的。并且需要用栈进行判断当遇到右括号时候,则与栈顶中元素进行对比,如果是匹配的左括号则出栈。如果出现不匹配则

4.代码

java 复制代码
class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        //        如果个数是奇数则绝对有问题
        if (s.length()%2==1){
            return false;
        }
        Map<Character,Character> map = new HashMap<>();
        map.put('}','{');
        map.put(')','(');
        map.put(']','[');

//       右括号无法存放进入stack中
        for (int i=0;i<s.length();i++){
           if (s.charAt(i)=='('||s.charAt(i)=='['||s.charAt(i)=='{'){
               stack.push(s.charAt(i));
           }else {
//               解决第一个右括号问题
               if(stack.isEmpty()){
                   return false;
               }
               if (stack.peek() == map.get(s.charAt(i))){
                   stack.pop();
               }else {
                   return false;
               }
           }
        }
        if (!stack.isEmpty()){
           return false;
        }
        return true;
    }
}

时间复杂度O(n),空间复杂度O(1)


会了?试试挑战下一题!♪(^∀^●)ノシ (●´∀`)♪

LeetCode150道面试经典题-- 环形链表(简单)_Alphamilk的博客-CSDN博客

相关推荐
大熊背10 分钟前
ISP图像处理中大数乘法溢出处理(一)
人工智能·python·算法·溢出处理
吴声子夜歌27 分钟前
Java面试——数据结构(一)
java·数据结构·面试
罗超驿27 分钟前
SpringBoot 快速入门
java·spring boot·后端
wabs66634 分钟前
关于栈【力扣1047. 删除字符串中的所有相邻重复项的思考】
数据结构·c++·算法·leetcode··代码随想录
疯狂打码的少年1 小时前
【数据结构】选择类排序:简单选择与堆排序
java·数据结构·笔记·算法
吴声子夜歌1 小时前
Java面试——基础
java·开发语言·面试
智码看视界2 小时前
Day 56:AI辅助开发全面提效:Copilot + Cursor的Java开发
java·单元测试·copilot·cursor·后端开发·代码审查·ai辅助开发
晚风醉蝶2 小时前
1-16-计数排序-CountingSort
python·算法·排序算法
疯狂打码的少年2 小时前
【数据结构】排序算法:归并排序与基数排序
数据结构·笔记·算法·排序算法
asdfg12589632 小时前
一个例子理解Java中的函数式接口
java·函数式接口