算法:有效的括号

有效的括号

题目描述

给定一个只包括 '(',')','{','}','','' 的字符串 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();
	}
相关推荐
atunet1 小时前
关于算法设计模式的演化与编程范式变迁的技术7
算法·设计模式
Jerry1 小时前
LeetCode 27. 移除元素
算法
佛珠散了一地1 小时前
ONNX Runtime GPU 推理配置指南
python
旖-旎1 小时前
《LeetCode 1137 第N个泰波那契数 和 LeetCode 三步问题》
c++·算法·leetcode·动态规划
wabs6661 小时前
关于动态规划【力扣718.最长重复子数组的思考】
算法·leetcode·动态规划
技术小黑1 小时前
CNN算法实战系列08 | ResNeXt-50算法实战与猴痘病识别
人工智能·算法·cnn
派葛穆2 小时前
Python-pip切换镜像源
开发语言·python·pip
Full Stack Developme2 小时前
Java 漏斗算法 及应用场景
java·开发语言·算法
CTA终结者2 小时前
2026年AI量化提效,工具重点要按阶段调整
人工智能·python