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

常见算法题目4 - 给定一个字符串,判断是否为有效的括号

算法题目4 - 给定一个字符串,判断是否为有效的括号

1.问题描述

给定一个只包括 ( 、 )、 {、 }、 [、] 的字符串s,即6中括号字符 ,判断字符串是否有效。
有效字符串需满足:

  • 左括号必须用相同类型的右括号闭合;
  • 右括号必须以正确的顺序闭合。
    例如:
输入:s = null
输出:false
输入:s = ""
输出:true
输入:s = "()"
输出:true
输入:s = "()[]{}"
输出:true
输入:s = "([])"
输出:true
输入:s = "([)]"
输出:false
输入:s = "({[)]}"
输出:false

2. 算法解决

2.1 解题思路

可以使用Java中的Stack(栈结构)辅助实现,栈的特点是先进后出(FILO).
①先进行空值判断。null默认返回false,""空字符串默认返回true;
②遍历字符串,使用栈结构存储左括号,遍历到右括号时,判断栈顶元素是否为对应的左括号,是则出栈,否则返回false
③遍历结束后,判断栈是否为空,为空则返回true,否则返回false.

2.2 代码实现
 /*** 题目:有效的括号* 时间复杂度:O(n)、空间复杂度:O(n)** @param s* @return*/public static boolean judgeEffectiveBrace(String s) {// 处理空数据if (s == null) {return false;}if (s.isEmpty()) {return true;}// 将字符串转换为字符数组char[] charArray = s.toCharArray();// 定义栈变量Stack<Character> stack = new Stack<>();// 遍历匹配for (char c : charArray) {// 如果是左括号 则入栈if (c == '(' || c == '{' || c == '[') {stack.push(c);} else {// 如果是右括号,判断栈是否为空if (stack.isEmpty()) {return false;}// 如果栈顶元素为对应的左括号,则出栈Character pop = stack.pop();// 如果匹配到栈顶元素为对应的左括号,则返回trueif (!(pop == '(' && c == ')')&& !(pop == '{' && c == '}')&& !(pop == '[' && c == ']')) {return false;}}}// 遍历结束后,判断栈是否为空,为空则返回true,否则返回falsereturn stack.isEmpty();}

3.测试

调用测试:

public class TestEffectiveBrace {public static void main(String[] args) {String str1 = null;boolean result1 = judgeEffectiveBrace(str1);System.out.println("字符串:" + str1 + ",判断有效的括号:" + result1);String str2 = "";boolean result2 = judgeEffectiveBrace(str2);System.out.println("字符串:" + str2 + ",判断有效的括号:" + result2);String str3 = "()";boolean result3 = judgeEffectiveBrace(str3);System.out.println("字符串:" + str3 + ",判断有效的括号:" + result3);String str4 = "()[]{}";boolean result4 = judgeEffectiveBrace(str4);System.out.println("字符串:" + str4 + ",判断有效的括号:" + result4);String str5 = "([])";boolean result5 = judgeEffectiveBrace(str5);System.out.println("字符串:" + str5 + ",判断有效的括号:" + result5);String str6 = "([)]";boolean result6 = judgeEffectiveBrace(str6);System.out.println("字符串:" + str6 + ",判断有效的括号:" + result6);String str7 = "({[)]}";boolean result7 = judgeEffectiveBrace(str7);System.out.println("字符串:" + str7 + ",判断有效的括号:" + result7);}}

打印结果:
在这里插入图片描述

http://www.xdnf.cn/news/9091.html

相关文章:

  • 鸿蒙桌面快捷方式开发
  • 进程通信(管道,共享内存实现)
  • 【unity游戏开发——编辑器扩展】Gizmos可视化辅助工具
  • Leetcode 1924. 安装栅栏 II
  • RabbitMQ 集群与高可用方案设计(二)
  • PyTorch实战(7)——生成对抗网络(Generative Adversarial Network, GAN)实践详解
  • 黑龙江云前沿-服务器托管
  • CentOS7安装 htop(100% 可以安上)
  • 使用VuePress开发日志
  • Redis与Lua脚本深度解析:原理、应用与最佳实践
  • ES文件管理器 安卓APP(文件管理器) v4.4.3.0 无广告高级版
  • 【无标题】第一章 Hello World的诅咒
  • 古腾堡编辑器教程:如何使用WordPress图库区块
  • 第十讲 | 继承
  • 商品颜色/尺码选项太多谷歌爬虫不收录怎么办?
  • 自动化测试:等待方式
  • 体育数据支撑比分网的全链路技术解析:从架构设计到场景落地
  • SQLMesh 用户定义变量详解:从全局到局部的全方位配置指南
  • OpenSSL 文件验签与字符串验签原理及 C 语言实现详解
  • 编程中优秀大模型推荐:特点与应用场景深度分析
  • Pycharm的简单介绍
  • 002大模型-提示词工程,少样本提示,角色扮演,思维链
  • 基于python+Django+Mysql的校园二手交易市场
  • 在 Windows 上使用 WSL 安装 Ansible详细步骤
  • x86 与 ARM 汇编深度对比:聚焦 x86 汇编的独特魅力
  • 利用python爬虫获取淘宝天猫商品评论封装API实战演示
  • 【生物信息学】k-mer的基本概念及应用
  • python打卡day37@浙大疏锦行
  • tc3975开发板上有ft2232这块的电路,我想知道这个开发板有哪些升级方式,重点关注是怎样通过ft2232实现的烧录升级的
  • 单片机上按键功能通常都是用什么方法写?