zoukankan      html  css  js  c++  java
  • 32. 最长有效括号. ①栈

    给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。

    示例 1:

    输入: "(()"
    输出: 2
    解释: 最长有效括号子串为 "()"
    示例 2:

    输入: ")()())"
    输出: 4
    解释: 最长有效括号子串为 "()()"

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/longest-valid-parentheses
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    1.栈
    入栈的是下标,左括号入栈,右括号出栈,若为空,右括号自己入栈,若非空,出栈,然后用当前下标减去栈顶下标,这个结果就是当前右括号为结尾的有效括号长度。

    class Solution {
    public:
        int longestValidParentheses(string s) {
            int ans = 0;
            stack <int> st;
            st.push(-1);
    
            for (int i = 0; i < s.size(); i++){
                if (s[i] == '('){
                    st.push(i);
                }
                else{
                    st.pop();
                    if (st.empty()) st.push(i);
                    else ans = max(ans, i - st.top());
                }
            }
    
            return ans;
        }
    };
    

    2.计数
    在此方法中,我们利用两个计数器 extit{left}left 和 extit{right}right 。首先,我们从左到右遍历字符串,对于遇到的每个 ext{‘(’}‘(’,我们增加 extit{left}left 计数器,对于遇到的每个 ext{‘)’}‘)’ ,我们增加 extit{right}right 计数器。每当 extit{left}left 计数器与 extit{right}right 计数器相等时,我们计算当前有效字符串的长度,并且记录目前为止找到的最长子字符串。当 extit{right}right 计数器比 extit{left}left 计数器大时,我们将 extit{left}left 和 extit{right}right 计数器同时变回 00。

    class Solution {
    public:
        int longestValidParentheses(string s) {
            int l,r;
            int ans = 0;
    
            l = 0; r = 0;
            for (int i = 0; i < s.size(); i++){
                if (s[i] == '(') l++;
                else r++;
                if (l == r) ans = max(ans, l + r);
                if (l < r) l = 0, r = 0;
            }
    
            l = 0; r = 0;
            for (int i = s.size() - 1; i >= 0; i--){
                if (s[i] == '(') l++;
                else r++;
                if (l == r) ans = max(ans, l + r);
                if (l > r) l = 0, r = 0;
            }
    
            return ans;
        }
    };
    
  • 相关阅读:
    JavaScript数组操作
    cxf-rs 和 swagger 的点
    cxf-rs 、spring 和 swagger 环境配置切换【github 有项目】
    (二)swagger-springmvc
    (二)spring-mvc-showcase 和 swagger-springmvc 的恩恩怨怨
    svn 创建tag
    swagger 入门
    jax-rs
    swagger core 和 swagger ui 如何关联【窥探】
    配置 struts2 时掉进 web.xml 的坑
  • 原文地址:https://www.cnblogs.com/xgbt/p/13235210.html
Copyright © 2011-2022 走看看