当前位置: 首页 > news >正文

台州公司做网站学校让做网站做完怎么交

台州公司做网站,学校让做网站做完怎么交,vs网站开发建表怎么肩啊,免费申请域名的网站有效的括号题目描述给定一个只包含 (, ), {, }, [, ] 的字符串,判断是否每个左括号都能被正确的右括号闭合,并且顺序正确。例如:输入输出解释"()"true成对"()[]{}"true成对,顺序正确"(]"false括号类…

有效的括号

题目描述

给定一个只包含 '(', ')', '{', '}', '[', ']' 的字符串,判断是否每个左括号都能被正确的右括号闭合,并且顺序正确。

例如:

输入输出解释
"()"true成对
"()[]{}"true成对,顺序正确
"(]"false括号类型不匹配
"([)]"false顺序不正确
"{[]}"true成对嵌套

解题思路

这道题是使用栈解决的经典问题。

为什么可以用栈来做?

栈是一种后进先出(LIFO)的数据结构,非常适合处理成对出现且嵌套结构的问题。

想象如下字符串:

"{ [ ( ) ] }"

从左往右处理:

  • 遇到左括号时就压入栈。
  • 遇到右括号时,从栈顶取出最近的左括号,检查是否与当前右括号匹配。
  • 匹配则继续,不匹配则返回 false。

以字符串 "{(){[]}}" 为例: 步骤如下:

i当前字符栈操作栈状态说明
0{入栈{左括号入栈
1(入栈{ (左括号入栈
2)匹配 & 出栈{) ↔ ( 成功匹配
3{入栈{ {左括号入栈
4[入栈{ { [左括号入栈
5]匹配 & 出栈{ {] ↔ [ 成功匹配
6}匹配 & 出栈{} ↔ { 成功匹配
7}匹配 & 出栈} ↔ { 成功匹配

C++ 代码实现

bool isValid(string s) {stack<char> stk;for (char ch : s) {// 左括号,压入栈if (ch == '(' || ch == '{' || ch == '[')stk.push(ch);else {// 遇到右括号,栈必须非空if (stk.empty()) return false;char top = stk.top();// 判断是否匹配if ((ch == ')' && top != '(') ||(ch == '}' && top != '{') ||(ch == ']' && top != '['))return false;stk.pop(); // 匹配成功,弹出}}// 如果所有括号都匹配,栈应为空return stk.empty();
}

复杂度分析

时间复杂度:O(n),只遍历一次字符串

空间复杂度:O(n),最坏情况下栈中存放所有左括号

代码优化

优化一:

如果字符串长度是奇数(n % 2 == 1),直接返回 false,因为括号必须成对出现,不可能匹配成功。

        int n = s.size();if (n % 2 == 1) {return false;}

优化二:

定义一个哈希表 pairs,用于映射每个右括号对应的左括号。

        unordered_map<char, char> pairs = {{')', '('},{']', '['},{'}', '{'}};

用哈希表 unordered_map 映射右括号对应的左括号,方便查找。而且可以提高代码的可扩展性,逻辑更清晰。

C++ 代码实现

class Solution {
public:// 判断输入字符串中的括号是否成对匹配bool isValid(string s) {int n = s.size();// 若长度为奇数,不可能完全配对,直接返回 falseif (n % 2 == 1) {return false;}// 定义右括号到左括号的映射关系unordered_map<char, char> pairs = {{')', '('},{']', '['},{'}', '{'}};stack<char> stk; // 用栈来存储尚未匹配的左括号// 遍历字符串中的每一个字符for (char ch : s) {// 如果是右括号if (pairs.count(ch)) {// 栈为空或栈顶不是对应的左括号,说明匹配失败if (stk.empty() || stk.top() != pairs[ch]) {return false;}stk.pop(); // 匹配成功,弹出左括号} else {// 是左括号,入栈stk.push(ch);}}// 最终栈为空,说明所有括号都匹配成功return stk.empty();}
};
http://www.dtcms.com/a/578891.html

相关文章:

  • 回过头来重新对C语言进行深度学习(一)
  • 网站多久才能做起来三明市建设局网站
  • 《Effective Java》解读第9条:try-with-resources 优先于 try-finally
  • redis 大key问题整理
  • 如何解决 pip install --target 安装成功但脚本不在 PATH(无法调用)问题
  • 深圳企业集团网站建设一个人制作网站
  • 网站外链建设原则中国最大建筑招聘网
  • 李沐深度学习笔记D2-矩阵计算
  • 做期货关注网站淄博网站排名优化报价
  • 创新的南昌网站建设住房和城乡建设部网站城市稽查
  • 张家口建设局网站网站规划的内容
  • 花生壳做网站速度古典asp网站源码
  • leetcode 2208 将数组和减半的最少操作次数
  • 免费的外贸网站怎么搭建个人网站电脑做服务器
  • php网站开发软件是什么烟台芝罘区住房建设局网站
  • AI代码编辑器 - AI代码框架 - AIDevFlow - 使用手册
  • 镇江网站建设哪家好阳江市企业网站优化
  • 教程网站后台密码杭州网站建设unohacha
  • 系统运维Day01_SSH服务
  • 长沙企业网站建设优度wordpress英文
  • 一二三线协同 | IT运维系统如何实现问题处理的高效闭环
  • 建设银行淮安招聘网站阿里云网站建设官方自营店
  • 做外贸在那些网站找业务增城网站开发
  • 【HarmonyOS-App发布】
  • 建网站的费用是多少钱旅游电子商务网站建设的流程
  • JVM(Java Virtual Machine)
  • css全局样式初始化
  • 产品类网站手机怎么下载网页上的视频
  • linux一次性批量更新文件时间戳
  • 阿里云服务器可以做下载类网站吗整容网站模板