美文网首页
code - 最长有效字符串

code - 最长有效字符串

作者: BestFei | 来源:发表于2020-04-11 17:06 被阅读0次

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

A:
从左到右开始遍历计数,当遇到左括号时,Left 加 1,右括号时 Right 加1。
对于最长有效的括号的子串,一定是左括号等于右括号时,更新最长结果;
一旦右括号数量超过左括号数量了,说明当前位置不能组成合法括号子串,
Left 和 Right 重置为 0,从后一个字符开始重新计数比较,直到最后一个字符。
这时会发现逻辑上有漏洞,只处理了 Left <= Right 的情况,
对于这种情况 "(()" 时,在遍历结束时左右子括号数都不相等,此时没法更新最长结果,但实际是需要做对比更新的。
此时需要反向遍历一遍 ,采取类似的机制,稍有不同的是此时若 Left 大于 Right 了,则重置 0,这样就可以涵盖所有情况。

public class LongestValid {

    public static int getLongestValid(String s){
        if(s == null || s.length()==0)
            return 0;
        int left = 0,right=0,maxValue=0;
        for (int i=0;i<s.length();i++){
            if(s.charAt(i)=='(')
                left++;
            else
                right++;
            if(left<right){
                left = 0;right=0;
            }
            else if(left==right){
                maxValue= Math.max(maxValue,2*left);
            }
        }
        left = 0;right=0;
        for(int i=s.length()-1;i>=0;i--){
            if(s.charAt(i)=='(')
                left++;
            else
                right++;
            if(right<left){
                left = 0;right=0;
            }
            else if(left==right){
                maxValue= Math.max(maxValue,2*left);
            }
        }
        return maxValue;
    }


    public static void main(String[] args) {
        ArrayList<String> stringArray = new ArrayList<String>();
        stringArray.add(null);
        stringArray.add("()()()");
        stringArray.add("(()()()");
        stringArray.add("()()())");
        stringArray.add("()()()(");
        stringArray.add("(()()())");
        stringArray.add(")(()()())");
        stringArray.add("(()())())");
        stringArray.add("(()()))())");
        for(int i=0;i<stringArray.size();i++){
            System.out.println(stringArray.get(i)+" max value is :"+getLongestValid(stringArray.get(i)));
        }
    }
    
}

控制台输出

null max value is :0
()()() max value is :6
(()()() max value is :6
()()()) max value is :6
()()()( max value is :6
(()()()) max value is :8
)(()()()) max value is :8
(()())()) max value is :8
(()()))()) max value is :6

相关文章

  • coding

    code - 获取质数code - 两数之和匹配目标值code - 最长有效字符串code - 字符的有效匹配co...

  • code - 最长有效字符串

    Q:给定一个只包含 '('和')' 的字符串,找出最长的包含有效括号的子串的长度。 A:从左到右开始遍历计数,当遇...

  • LeetCode-32-最长有效括号

    LeetCode-32-最长有效括号 题目 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的...

  • LeetCode热门100题算法和思路(day3)

    LeetCode32 最长有效括号 题目详情 给你一个只包含 '('和 ')'的字符串,找出最长有效(格式正确且连...

  • LeeCode刷题笔记4:最长有效括号

    @[TOC](最长有效括号) 题目描述 给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串...

  • 最长有效括号

    32. 最长有效括号 题目: 给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串...

  • leetcode 32 最长有效括号

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

  • 32. Longest Valid Parentheses

    题目概括: 给定一个只有括号的字符串,找到最长的有效括号。例如: "(()" -> "()" 专题: 动态优化, ...

  • 栈--最长有效括号

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

  • 最长有效括号

    //给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。//输入:s = ...

网友评论

      本文标题:code - 最长有效字符串

      本文链接:https://www.haomeiwen.com/subject/vodumhtx.html