题目:输入只包含圆括号的字符串,找出最长的合法括号子串的长度
比如:
“(()”——》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; } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/u012249528/article/details/46705985