【算法与数据结构】20、LeetCode有效的括号

news/2024/11/16 9:36:21/

文章目录

  • 一、题目
  • 二、解法
  • 三、完整代码

所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。

一、题目

在这里插入图片描述

二、解法

  思路分析:括号匹配是使用栈解决的经典问题。做这道题首先要分析什么时候括号不匹配。1、右括号多余 ( { [ ] } ) ) ) 2、左括号多余( ( [ { } ] ( ) 3、括号没有多余,类型匹配不上 [ { [ ] } ) 。程序当中我们使用栈来保存符号,首先先判断数据是否合法。如果出现左括号,就向栈中保存相应的右括号,然后遍历整个字符串,碰到相同的字符串就弹出匹配的括号,如果最终栈为空那么字符串就是符号匹配的。第三个else if语句判断栈是否为空,这时候栈为空那么说明字符串当中没有左括号或者左括号没有在开头,不管哪种情况都是不匹配的,直接return,同时判断栈顶的右括号和字符串中右括号是否相等,如果不相等说明不匹配。如果匹配则栈弹出匹配的括号。最终判断栈是否为空。

  程序如下

class Solution {
public:bool isValid(string s) {if (s.size() % 2) return false;	// 符号数量不为偶数,必定不匹配stack<char> stack_char;for (int i = 0; i < s.size(); ++i) {if (s[i] == '(') stack_char.push(')');else if (s[i] == '[') stack_char.push(']');else if (s[i] == '{') stack_char.push('}');else if (stack_char.empty() || stack_char.top() != s[i]) return false;	// 右括号多余的情况(Stack为空)以及括号不匹配的情况else stack_char.pop();}return stack_char.empty();	// 如果左括号多余,Stack不为空,否则全部匹配Stack为空。}
};

复杂度分析:

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

三、完整代码

# include <iostream>
# include <stack>
# include <string>
using namespace std;class Solution {
public:bool isValid(string s) {if (s.size() % 2) return false;	// 符号数量不为偶数,必定不匹配stack<char> stack_char;for (int i = 0; i < s.size(); ++i) {if (s[i] == '(') stack_char.push(')');else if (s[i] == '[') stack_char.push(']');else if (s[i] == '{') stack_char.push('}');else if (stack_char.empty() || stack_char.top() != s[i]) return false;	// 右括号多余的情况(Stack为空)以及括号不匹配的情况else stack_char.pop();}return stack_char.empty();	// 如果左括号多余,Stack不为空,否则全部匹配Stack为空。}
};int main()
{string s = "()";Solution s1;bool result = s1.isValid(s);cout << "result:" << result << endl;system("pause");return 0;
}

end


http://www.ppmy.cn/news/788635.html

相关文章

获取HTML页面的所有图片地址

获取HTML页面的所有图片地址&#xff1a; getimgsrc() {let htmlstr document.getElementsByTagName(html)[0].innerHTML;let reg /<img.?src(|")?([^"])(|")?(?:\s|>)/g;let arr [];while (tem reg.exec(htmlstr)) {arr.push(tem[2]);}return ar

JavaScript中获取input上传的图片返回的地址

1. HTML文件 <li><label for"uploadFile" class"upload-file">点击上传</label><!-- 在CSS中将input隐藏&#xff0c;UI效果用label展示 --><input type"file" name"upload_file" id"uploadFile&quo…

如何查询网址的图片地址(下载瓦片地图用)

1、用谷歌浏览器打开网址 比如 map.baidu.com 2、按下F12&#xff08;调出源码器&#xff09;编码工具 3、看到Network&#xff0c;在网站上移动位置 4 看到一堆东西&#xff0c;有缩略图的可以打开看看&#xff0c;右键新窗口打开 https://maponline0.bdimg.com/starpic/?q…

js图片尺寸大小获取

//图片流作为参数传递 获取图片尺寸大小提示function getImgTip(bdImgBase) {(async () > {let size await getImageSize(bdImgBase);$(#imgTip).html("当前图片宽高尺寸为[" size.width "px * " size.height "px]");})();}//参数为二进…

js 通过图片链接获取file对象

直接看代码 imgUrlToFile(url) {var self this;var imgLink url;var tempImage new Image();//如果图片url是网络url&#xff0c;要加下一句代码tempImage.crossOrigin "*";//跨域不可用tempImage.onload function() {var base64 self.getBase64Image(tempIma…

那要怎么找到图片URL呢

图片 URL 可以通过以下步骤找到&#xff1a; 右键点击图片并选择“查看图片”。在新标签页中右键点击图片并选择“复制图片地址”。将复制的图片地址粘贴到地址栏中。 请注意&#xff0c;有些图片可能是动态生成的&#xff0c;因此不能通过上述方法获取它们的 URL。在这种情况下…

Android获取系统相册图片选中地址,获取手机中的所有图片地址自定义相册

一、获取手机中的值 1.首先在使用读写sd卡权限 2.获取手机中的所有图片&#xff1a; 注意代码中的getGalleryPhotos(getContentResolver()) 方法获取所有地址 获取所有图片地址后使用recycleview 组件构建自定义相册&#xff0c;recycleview的使用方式我就不多说了自己百度 …

vue中使用require动态获取图片地址

项目场景&#xff1a; 项目中根据图片不同的后缀名&#xff0c;展示不同的图片 问题描述 直接给图片的src绑定图片地址&#xff0c;图片不显示&#xff0c;使用 require(图片本地路径 地址变量 .png) 也不显示 <img :src"require(/assets/img/ item.url .png)&qu…