算法:有效的括号

有效的括号

题目描述

给定一个只包括 '(',')','{','}','','' 的字符串 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();
	}
相关推荐
北域码匠4 小时前
高通滤波算法深度解析(High-Pass Filter)
stm32·算法·c#·数字信号处理·嵌入式开发·滤波算法·高通滤波
问天_观心5 小时前
大模型微调学习(二)
人工智能·python·深度学习·学习·语言模型·transformer
洋洋不叫杨杨5 小时前
揭秘当下知名的SEO优化渠道,你知道几个?
大数据·python
阿童木写作5 小时前
跨境图片翻译工具推荐:批量处理视频字幕与智能抠图
python·音视频
指掀涛澜天下惊5 小时前
强化学习进阶篇八 策略梯度算法
深度学习·学习·算法·强化学习
乌萨奇也要立志学C++5 小时前
【洛谷】kmp算法
开发语言·算法
梦想的颜色5 小时前
OCR 识别原理与 Python 识图全实战:从文字提取到图像内容理解
python·计算机视觉·ocr·图像识别·python 识图
禹凕5 小时前
Dijkstra算法详解与应用
python·算法
别走!万哥爱你6 小时前
Python 中可以用于在已排序的列表中查找特定元素的位置的是什么?
python
YaraMemo6 小时前
元启发式算法框架
人工智能·算法·5g·信息与通信·启发式算法·信号处理