最长有效括号的长度(来自 庞果)

该博客探讨了如何找到只包含'('和')'的字符串中,最长有效括号子串的长度。有效括号是指成对出现的'()',例如在字符串"(()"中,最长有效括号子串是"()",长度为2。对于")()()",最长有效括号是"()()",长度为4。函数`longestValidParentheses(String s)`用于求解这个问题,返回有效括号对的数量的两倍作为结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一次挑战失败了,现在又重新修改了一下自己的代码,但是发现不能再次挑战了,只好把代码放在这里,希望大家能够批评指正,我也不知道是否符合题目要求。

原题:

 给定只包含字符'('和')'的字符串,请找出最长的有效括号内子括号的长度。举几个
 例子如下:例如对于"(()",最长的有效的括号中的子字符串是"()",有效双括号数
 为1个,故它的长度为2。再比如对于字符串")()())",其中最长的有效的括号中的
 子字符串是"()()",有效双括号数2个,故它的长度为4。再比如对于"(()())",它
 的长度为6。换言之, 便是有效双括号"()"数的两倍。给定函数原型
 int longestValidParentheses(String s),请完成此函数,实现上述功能。

public static int longestValidParentheses(String s){
		int count=0;	//用于记录括号的对数
		final String strLeft = "(";
		final String strRight = ")";
		char[] parentheses = s.toCharArray();	//将字符串转换成字符数组
		Stack<String> stack = new Stack<String>();
		
		int length = s.length();	//字符串的长度
		for(int i=0; i<length; i++){
			if(stack.isEmpty()){	//首次循环,栈空 把元素放入栈
				if(parentheses[i] == '(')
					stack.push(strLeft);
				else
					stack.push(strRight);
			}else
			{
				String temp = stack.peek();	//获取栈顶元素
				if(parentheses[i]==')' && temp!=strLeft){
					if(parentheses[i] == '(')
						stack.push(strLeft);
					else
						stack.push(strRight);
				}else if(parentheses[i]==')' && temp==strLeft){
					stack.pop();	//配对成功,弹出栈中的元素
					count++;
				}else{
					if(parentheses[i] == '(')
						stack.push(strLeft);
					else
						stack.push(strRight);
				}
			}
		}
		return 2*count;
	}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值