求最长有效括号长度 java

题目:输入只包含圆括号的字符串,找出最长的合法括号子串的长度

比如:

“(()”——》2,最长的有效子串是“()”

“)()())”——》4,最长的有效子串是“()()”

解题思路:

如果输入是左括号就直接入栈,如果是右括号,如果此时栈为空或此时的栈顶不为左括号就不作处理同时把记录有效长度的临时变量置为0,如果栈顶为左括号则出栈并把记录有效长度的临时变量加2.最后返回最大的记录长度的临时变量即可。

代码:

import java.util.Stack;

public class LeetCode_LongestValidTokens {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String input=")())())";
		System.out.println(longestValidTokens(input));

	}

	public static int  longestValidTokens(String input) {

		char[] inputArray=input.toCharArray();
		int length=inputArray.length;
		if(length==0)
			return 0;
		int validLength=0;
		int maxValidLength=0;
		Stack<Character> stack=new Stack<>();
		for(int i=0;i<length;i++)
		{

			if(inputArray[i]==')')
			{
				if(stack.isEmpty())
				{
					validLength=0;
				}
				else {
					char tempPeek=stack.peek();
					if(tempPeek=='(')
					{
						stack.pop();
						validLength=validLength+2;
						maxValidLength=Math.max(maxValidLength, validLength);
					}
					else {
						validLength=0;
					}
				}

			}
			else {
				stack.push(inputArray[i]);
			}

		}
		return maxValidLength;

	}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-28 15:32:57

求最长有效括号长度 java的相关文章

最长有效括号长度

题目详情 给定只包含括号字符'('和 ')''的字符串,请找出最长的有效括号内子括号的长度. 举几个例子如下: 例如对于"( ()",最长的有效的括号中的子字符串是"()" ,有效双括号数1个,故它的长度为 2. 再比如对于字符串") () () )",其中最长的有效的括号中的子字符串是"() ()",有效双括号数2个,故它的长度为4. 再比如对于"( () () )",它的长度为6. 换言之,便是有效双括

LongestValidParentheses, 求最长合法括号子串长度-----同类问题ValidParentheses,GenerateParentheses

问题描述:求括号字符串中最长合法子串长度.例如:()((),返回2,而不是4. 算法分析:还是利用栈,和判断合法括号对是一样的. 1 public static int longestValidParentheses(String s) { 2 Stack<int[]> stack = new Stack<int[]>(); 3 int result = 0; 4 5 for(int i=0; i<=s.length()-1; i++) 6 { 7 char c = s.ch

求最长公共子序列长度

poj 1458  Common Subsequence http://poj.org/problem?id=1458 问题分析: 这个题是求两个序列的最长公共最序列长度,在这里要弄清楚两个问题 1:本题中所有的子序列并没有要求是连续子序列,所以在求最长子序列的时候不连续是允许的 2:哪部分子序列才是最长的 对于给定的 X = < x1, x2, ..., xm > 和 Z = < z1, z2, ..., zk > ,X序列与Z的每一个子序列都含有公共子序列(最小为0),同理,Z

codevs 1862 最长公共子序列(求最长公共子序列长度并统计最长公共子序列的个数)

题目描述 Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X="x0,x1,-,xm-1",序列Y="y0,y1,-,yk-1"是X的子序列,存在X的一个严格递增下标序列<i0,i1,-,ik-1>,使得对所有的j=0,1,-,k-1,有xij = yj.例如,X="ABCBDAB",Y="BCDB"是X的一个子序

n个整数中,找出尽可能多的数使他们组成一个等差数列,求最长等差数列的长度

例子:  3,8,4,5,6,2          返回值应该为 :5 这是昨天做的一道优酷土豆的编程题,和leetcode中的128/ Longest Consecutive Sequence 有点相似,但是leetcode题的公差是确定的1,而这道题的公差是不确定的. 本人的写出的是一种通过穷举的方法实现查找最长等差数列,通过hash使查找更为方便,减少了复杂度. int calcAPLength(const vector<int> &intAr) // 找数列中,最长的等差数列的

来自百度贴吧的练习题 :求最长单词的长度和最短单词的长度。

In the function ex5 write code that will input a line of text, split it into words, and display these words one per line, and also print the length of the longest and shortest words. You should regard any sequence of consecutive non-space characters

POJ 题目2774 Long Long Message(后缀数组,求最长公共子串长度)

Long Long Message Time Limit: 4000MS   Memory Limit: 131072K Total Submissions: 23696   Accepted: 9705 Case Time Limit: 1000MS Description The little cat is majoring in physics in the capital of Byterland. A piece of sad news comes to him these days:

[LeetCode] Longest Valid Parentheses 最长有效括号

Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring. For "(()", the longest valid parentheses substring is "()", which has length = 2. Another example is &

【LeetCode-面试算法经典-Java实现】【032-Longest Valid Parentheses(最长有效括号)】

[032-Longest Valid Parentheses(最长有效括号)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring. For "(()", the longest valid paren