算法:有效的括号

有效的括号

题目描述

给定一个只包括 '(',')','{','}','','' 的字符串 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();
	}
相关推荐
To_OC7 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
Scott9999HH7 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
2401_841495648 小时前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
AI云海8 小时前
python 列表、元组、集合和字典
开发语言·python
二十雨辰9 小时前
[爬虫]-Urllib
爬虫·python
玉鸯10 小时前
Agent Hook:在概率推理之上,为 Agent 叠加确定性控制
python·langchain·agent
weixin_4462608511 小时前
HACO:面向动态部署环境的对冲式智能计算可靠多智能体调度框架
后端·python·flask
我的xiaodoujiao11 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest