最长的有效括号内子括号的长度(来自 庞果)修改后的算法
2014-01-12 23:11
225 查看
这个算法是把之前写的算法进行了修改,个人认为这个算法正确理解了题目的含义。例如:) ( ( ) ) ) ( ( ) ( ) ( ) ( ) ),在第六个元素“)”处被打断,需要从后边开始重新计算有效括号的长度。这个例子中有两个有效括号长度,需要记录长度最大的那个。
代码如下:
代码如下:
public static int longestValidParentheses(String s){ int count=0; //用于记录有效括号的对数 //因为一个字符串中可能有多个。例如) ( ( ) ) ) ( ( ) ( ) ( ) ( ) ) //在第六个元素“)”处被打断,需要从后边开始重新计算有效括号的长度 int max = 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 { String temp = stack.peek(); //获取栈顶元素 //从栈里弹出的元素肯定是"(",因为只有"("入栈了 if(parentheses[i]==')' && temp==strLeft){ stack.pop(); //配对成功,弹出栈中的元素 count++; if(stack.isEmpty()){ //如果栈stack为空,说明其中的一部分有效长度的括号查找完毕,需要记录其长度 //当栈为空的时候,说明字符串中的其中一个有效括号查找完毕 //需要和之前的max值进行比较,始终让max中存储的是最大的值 max = max > count ? max : count; count = 0; //需要把count置0,用作下一次计数 } }else{ if(parentheses[i] == '(') stack.push(strLeft); //“)”无需放入栈中 } } } return 2*max; }
相关文章推荐
- 最长有效括号的长度(来自 庞果)
- 算法分析: 最长有效括号的长度
- 找出最长的有效括号内子括号的长度
- 找出最长的有效括号内子括号的长度
- 庞果网在线编程之最长有效括号长度问题ruby解答
- 括号字符串的有效性和最长有效长度
- 括号字符串的有效性和最长有效长度
- 字符串问题---括号字符串的有效性和最长有效长度
- 最长有效括号长度
- 【LeetCode-面试算法经典-Java实现】【032-Longest Valid Parentheses(最长有效括号)】
- Longest Valid Parentheses (求最长有效匹配括号子串的长度)
- 挑战编程: 最长有效括号的长度
- LeetCode | 32. Longest Valid Parentheses——最长有效括号匹配长度
- Longest Valid Parentheses (求最长有效匹配括号子串的长度)
- 在线编程:最长有效括号的长度
- 最长有效括号的长度问题
- 【LeetCode-面试算法经典-Java实现】【032-Longest Valid Parentheses(最长有效括号)】
- 最长有效括号长度
- ”最长有效括号的长度“
- 求最长有效匹配括号子串的长度(Longest Valid Parentheses)