算法:有效的括号

有效的括号

题目描述

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

有效字符串需满足:

左括号必须用相同类型的右括号闭合。

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

每个右括号都有一个对应的相同类型的左括号。

题目示例

java 复制代码
示例 1:

输入:s = "()"

输出:true

示例 2:

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

输出:true

示例 3:

输入:s = "(]"

输出:false

示例 4:

输入:s = "([])"

输出:true

示例 5:

输入:s = "([)]"

输出:false

算法实现

看了下别人的算法很巧妙,用replace("()","")循环替换,直到字符串长度是0则满足要求。

我用了Stack数据结构完成题解,思路很简单就是当遇到左括号的时候就入栈,当遇到右括号的时候将当前栈顶的元素与右括号对比,如果比对失败说明不符合要求。整体代码如下:

java 复制代码
public boolean isValid(String s) {

		if (s == null || s.isEmpty()) {
			return false;
		}
		int length = s.length();
		if (length % 2 != 0) {// 奇数直接返回false
			return false;
		}
		char[] chars = s.toCharArray();
		Stack stack = new Stack();
		for(int i=0;i<length;i++) {
			char c = chars[i];
			if(c=='('||c=='['||c=='{') {
				stack.add(c);
			}else {//处理 )]}
				if(stack.isEmpty()) {
					return false;
				}
				char left = (char) stack.pop();
				boolean isValid = (c==')'&&left=='(')
						||(c==']'&&left=='[')||
						(c=='}'&&left=='{');
				if(!isValid) {
					return false;
				}
			}
		}//end for
	
		return stack.isEmpty();
	}
相关推荐
从零开始学习人工智能2 小时前
【踩坑实录】WSL2 解决 onnxruntime\-gpu ImportError: libcudart\.so\.13 无 CUDA13 运行库问题
python
大明者省3 小时前
WSL2 Ubuntu22.04 GPU训练环境配置指南
人工智能·算法·计算机视觉
卷无止境4 小时前
在 awesome-fastapi 里,哪些库值得一看?
后端·python
zhanghaha13144 小时前
Python进阶教程:6_JSON 数据解析 —— 新手完全指南
开发语言·python·json
Python私教4 小时前
API 输出模型怎么设计:从 model_dump() 到显式展示层
python·fastapi
白狐_7984 小时前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
Python私教5 小时前
本地 AI 工具服务该绑定 127.0.0.1 还是 0.0.0.0?
python·fastapi
zander2585 小时前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法
卷无止境5 小时前
FastAPI 的Admin面板生态
后端·python
Shell运维手记5 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github