博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 32 括号匹配
阅读量:4967 次
发布时间:2019-06-12

本文共 1387 字,大约阅读时间需要 4 分钟。

[LeetCode 32] Longest Valid Parentheses

题目

Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.

测试案例

Input: "(()"Output: 2Explanation: The longest valid parentheses substring is "()"Input: ")()())"Output: 4Explanation: The longest valid parentheses substring is "()()"

思路

  1. 采用栈数据结构。栈中存放各字符的下标。初始时里面放入-1。

  2. 从左至右依次遍历每个字符。当前字符为左括号就进栈。当前字符为右括号时,如果栈中存在左括号,则出栈。否则,入栈。
  3. 每当都元素,记下标为 i ,进栈时,就用 i - stack.peek() - 1 更新 max。
  4. 遍历结束后,需要用 n - stack.peek() - 1 更新 max。

代码如下

class Solution {    public int longestValidParentheses(String s) {                int max = 0, n = s.length(), temp, index = 0;         if(n == 0){            return 0;        }        int[] stack = new int[n + 1];                stack[index++] = -1;        for(int i = 0; i < n; i++){            if(s.charAt(i) == '(' || (temp = stack[index - 1]) == -1 ||                s.charAt(temp) == ')'){                                               if((temp = i - stack[index - 1] - 1) > max){                    max = temp;                }                                stack[index++] = i;            }            else{                index--;                            }                    }        if((temp = n - stack[index - 1] - 1) > max){            max = temp;        }                return max;    }}

转载于:https://www.cnblogs.com/echie/p/9589097.html

你可能感兴趣的文章
表单校验之datatype
查看>>
python第六篇文件处理类型
查看>>
hdu 3183 A Magic Lamp 贪心
查看>>
ubuntu16系统磁盘空间/dev/vda1占用满的问题
查看>>
面试题14 调整数组顺序使奇数位于偶数前面
查看>>
grid网格布局
查看>>
flask简单的注册功能
查看>>
JSP常用标签
查看>>
dashucoding记录2019.6.7
查看>>
IOS FMDB
查看>>
编码总结,以及对BOM的理解
查看>>
九涯的第一次
查看>>
Android中全屏或者取消标题栏
查看>>
处理器管理与进程调度
查看>>
页面懒加载
查看>>
向量非零元素个数_向量范数详解+代码实现
查看>>
java zip 中文文件名乱码_java使用zip压缩中文文件名乱码的解决办法
查看>>
java if 用法详解_Java编程中的条件判断之if语句的用法详解
查看>>
java -f_java学习笔记(一)
查看>>
java 什么题目好做_用java做这些题目
查看>>