• 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;
        }
    };
    
  • 相关阅读:
    Vue_(组件通讯)父子组件简单关系
    JavaWeb_(Struts2框架)Struts创建Action的三种方式
    JavaWeb_(Struts2框架)Servlet与Struts区别
    Vue_(组件通讯)动态组件结合keep-alive
    Vue_(组件通讯)动态组件
    Vue_(组件通讯)组件
    JavaWeb_(Struts2框架)使用Struts框架实现用户的登陆
    JavaWeb_(Struts2框架)使用Servlet实现用户的登陆
    原生Js_实现广告弹窗
    原生Js_简易图片轮播模板
  • 原文地址:https://www.cnblogs.com/xgbt/p/13235210.html
Copyright © 2020-2023  润新知