首页 > 编程语言 >leetcode算法题-有效的括号(简单)

leetcode算法题-有效的括号(简单)

时间:2024-11-12 09:29:48浏览次数:1  
标签:case 栈顶 stack 括号 算法 字符串 leetcode

有效的括号(简单)

leetcode:https://leetcode.cn/problems/valid-parentheses/description/

前言

防止脑袋生锈,做一下leetcode的简单算法题,难得也做不来哈哈。

大佬绕道,小白可看。

题目描述

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

有效字符串需满足:

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

示例 1:

输入:s = "()"

输出:true

示例 2:

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

输出:true

示例 3:

输入:s = "(]"

输出:false

示例 4:

输入:s = "([])"

输出:true

提示:

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

题目解析

通过题目描述可以举例哪些是有效字符串,哪些是无效字符串,如:

有效字符串

  1. "()"
  2. "({})"
  3. "()[]"

无效字符串

  1. "(]"
  2. "({)}"
  3. ")"

不难发现即使字符串中有闭合但是顺序不对也是属于无效字符串。

解题思路

右括号不一定出现在左括号下一位

"([{}])"

左右括号必须以正确的顺序闭合:

"({})"

"({)}"

字符串中会存在有效的括号对也会有无效的括号对了,如:

"({})({})"

"({})({)}"

尝试将有效的括号对一一消除掉

"()({})" => "({})"=>"()"=>""

"()({)}"=>"({)}"

如果是有效的字符串最终会得到空字符串,反之则是无效字符串。

伪代码

遍历字符串:
	如果是左括号:
		等待遍历到与之对应的右括号
	如果是右括号:
		查看是否有与之对应的左括号
			如果有,则消除
			如果没有,当前字符串无效

动图

image

初步总结

通过前面的解题思路和动图可以发现,最后遍历到的左括号,最先匹配到有效的右括号。

这可以看作为“后进先出”的栈。后加入的元素最先被处理。

后进先出的栈

栈的定义

栈(Stack)是一种数据结构,遵循后进先出(LIFO, Last In First Out)的原则。也就是说,最后插入栈中的元素最先被取出。栈可以用来存储数据、管理函数调用、实现撤销操作等。

栈的主要操作包括:

  1. 压入(Push):将一个元素添加到栈顶。
  2. 弹出(Pop):移除并返回栈顶的元素。
  3. 查看栈顶(Peek/Top):返回栈顶的元素但不移除它。
  4. 检查栈是否为空(IsEmpty):判断栈中是否还有元素。

开始解题

图片详解

遍历字符串:
	如果是左括号:
		入栈
	如果是右括号:
		查看栈顶元素
			如果是对应的左括号则出栈
			如果不是,当前字符串无效

image

image

代码实现

public bool IsValid(string s) {
	Stack<char> stack = new Stack<char>();
	foreach (char c in s)
	{
		switch(c)
		{
            case '{':
            case '[':
            case '(':
            	stack.Push(c);
            	break;
			case '}':
				if(stack.Count == 0 || stack.Pop()!= '{')
					return false;
				break;
			case ']':
				if(stack.Count == 0 || stack.Pop()!= '[')
				return false;
				break;
			case ')':
				if(stack.Count == 0 || stack.Pop()!= '(')
					return false;
				break;
		}
	}
	return stack.Count == 0;
}

复杂度分析

  • 空间复杂度:O(n)
  • 时间复杂度:O(n)

结果展示

image

其他解法

public bool IsValid(string s) {
	int length = s.Length/ 2;
	for (int i = 0; i < length; i++) {
		s = s.Replace("()", "").Replace("{}", "").Replace("[]", "");
	}
	return s.Length == 0;
}

相关链接

标签:case,栈顶,stack,括号,算法,字符串,leetcode
From: https://www.cnblogs.com/ZYPLJ/p/18540739

相关文章

  • Python 进行数据挖掘的算法介绍
    1.决策树决策树是一种用于分类和回归任务的监督学习算法。它通过树状结构来表示决策过程,每个内部节点表示一个属性上的测试,每个分支代表一个测试结果,每个叶节点代表一种分类结果。示例代码:fromsklearn.datasetsimportload_irisfromsklearn.treeimportDecisionTreeCl......
  • 【初阶数据结构与算法】线性表之链表的分类以及双链表的定义与实现
    文章目录一、链表的分类二、双链表的实现1.双链表结构的定义2.双链表的初始化和销毁初始化函数1初始化函数2销毁函数3.双链表的打印以及节点的申请打印函数节点的申请4.双链表的头插和尾插头插函数尾插函数5.双链表的查找和判空查找函数判空函数6.双链表的头删和尾......
  • 浅谈python回归算法及其应用
    Python中有很多常用的回归算法,可以用于解决不同的问题。以下是几种常见的回归算法及其应用:1.线性回归:线性回归是一种最简单的回归算法,用于建立自变量和因变量之间的线性关系。它可以用于预测房价、销售量等连续变量。2.多项式回归:多项式回归允许自变量与因变量之间的非线......
  • 第四届算法、微芯片与网络应用国际会议(AMNA 2025) 2025 4th International Conference
    重要信息官网:https://ais.cn/u/vEbMBz......
  • 24/11/11 算法笔记<视觉> 换脸,人脸特征点检测
    先介绍一下换脸的简单步骤1、提取两张图片的脸部特征点2、为两张图片创建mask3、进行映射变换使得人脸对齐4、使用opencv的泊松融合将两张图片合成我们直接上代码1.导入代码包importmediapipeasmpfrommediapipe.tasksimportpythonfrommediapipe.tasks.pythoni......
  • Java实现常用加密算法-SM4
    参考博客:https://blog.csdn.net/m0_46713218/article/details/143099878参考博客:sm4前后端加密集成pom:<!--SM4加密依赖包--><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk18on</artifactId><version>1.......
  • 【优选算法 — 滑动窗口】水果成篮 & 找到字符串中所有字母异位词
         水果成篮  水果成篮  题目描述  因为只有两个篮子,每个篮子装的水果种类相同,如果从0开始摘,则只能摘0和1两个种类;因为当我们在两个果篮都装有水果的情况下,如果再走到下一颗果树,果树的水果种类不是果篮中的任意一种,则停止采摘;所以就是要找......
  • python算法之最low三人组之一——————选择排序
    之前讲过了冒泡排序,我们再聊一聊最low三人组中的选择排序,选择排序的基本思想是:遍历整个序列,选取其中一个最小的数取出来,然后再次遍历除了刚刚选出来的最小的数的序列中最小的数现在让我们看看代码实现importrandomdefselect_sort(li):new_li=[]foriinrange(l......
  • leetcode刷题笔记--最大滑动窗口
    classSolution{publicintlongestOnes(int[]nums,intk){intl=0,r=0;while(r<nums.length){if(nums[r++]==0){k--;}if(k<0&&nums[l++]==0){......
  • 基于GSP工具箱的NILM算法matlab仿真
    1.课题概述       基于GSP工具箱的NILM算法matlab仿真。GSP是图形信号处理的缩写,GSP非常适合对未知数据进行分类,尤其是当训练数据非常短时。GSPBox的基本理论是谱图论和图滤波,因此,GSPBox中的主要对象是图,图包括图的基本元素,如节点、边和权重矩阵等。 2.系统仿真结果......