zoukankan      html  css  js  c++  java
  • Leetcode#32 Longest Valid Parentheses

    原题地址

    方法I:动态规划

    len[i]表示从i开始到结束的最长合法括号串长度,则:

    如果s[i] == "(" 且 s[i+len[i+1]+1]==")",len[i] = len[i+1] + 2

    否则len[i] = 0

    方法II:辅助栈

    跟那个直方图求最大面积有点类似,用一个栈保存合法括号串的长度,显然长度只能是大于0的偶数(废话),所以可以用0表示"("。

    如果当前元素是"(",将0压栈

    如果当前元素是")",依次查看栈顶元素并弹栈

    如果栈顶元素大于0,说明这是一个合法括号串的长度,那么累加到总长度上

    如果栈顶元素等于0,说明遇到了一个"(",将总长度+2,然后重新压栈,如果有必要,更新最长括号长度

    这样遍历完s以后,栈里面都是一些局部括号串的长度,以及一些0(代表未匹配的"("),然后再做一遍上面的操作即可

    代码:(方法II)

     1 int longestValidParentheses(string s) {
     2   stack<int> st;
     3   int len = 0;
     4   int top = 0;
     5   int maxLen = 0;
     6 
     7   for (int i = 0; i < s.length(); i++) {
     8     if (s[i] == '(')
     9       st.push(0);
    10     else {
    11       len = 0;
    12       while (!st.empty()) {
    13         int top = st.top();
    14         st.pop();
    15         len += top;
    16         if (top == 0) {
    17           len += 2;
    18           st.push(len);
    19           break;
    20         }
    21       }
    22       maxLen = max(maxLen, len);
    23     }
    24   }
    25 
    26   len = 0;
    27   while (!st.empty()) {
    28     top = st.top();
    29     st.pop();
    30     if (top > 0)
    31       len += top;
    32     else {
    33       maxLen = max(maxLen, len);
    34       len = 0;
    35     }
    36   }
    37   maxLen = max(maxLen, len);
    38 
    39   return maxLen;
    40 }
  • 相关阅读:
    作用域面试题
    js··BOM 浏览器对象模型
    js···DOM2动态创建节点
    js ·节点的知识点
    js·逻辑运算
    js···元素的属性
    什么是函数封装。
    hive 历史拉链表的处理
    [转]实现Hive数据同步更新的shell脚本
    python 3 过滤股票
  • 原文地址:https://www.cnblogs.com/boring09/p/4243153.html
Copyright © 2011-2022 走看看