美文网首页
LeetCode之Longest Valid Parenthes

LeetCode之Longest Valid Parenthes

作者: 糕冷羊 | 来源:发表于2020-06-11 20:22 被阅读0次

    问题:



    方法:
    根据题意很容易发现,对"("和")"进行连续计数,当")"数量多于"("数量时子串需结束,如"(()))"情况,所以遍历字符串并根据这一规则,可以获得最长子串的长度的。但是,当出现"(()"情况时,无法统计子串长度,因此可以倒序再次遍历获得正确的子串长度。

    class LongestValidParentheses {
        fun longestValidParentheses(s: String): Int {
            var l = 0
            var r  = 0
            var length = 0
            for (ch in s) {
                if (ch == '(') {
                    l++
                } else if (ch == ')') {
                    r++
                }
                if (r > l) {
                    l = 0
                    r = 0
                } else if (r == l) {
                    if (2 * r >= length) {
                        length = r + l
                    }
                }
            }
            l = 0
            r = 0
            for (ch in s.reversed()) {
                if (ch == '(') {
                    r++
                } else if (ch == ')') {
                    l++
                }
                if (r > l) {
                    l = 0
                    r = 0
                } else if (r == l) {
                    if (2 * r >= length) {
                        length = r + l
                    }
                }
            }
            return length
        }
    }
    
    fun main(args: Array<String>) {
        val input = ")()())"
        val longestValidParentheses = LongestValidParentheses()
        print(longestValidParentheses.longestValidParentheses(input))
    }
    

    有问题随时沟通

    具体代码实现可以参考Github

    相关文章

      网友评论

          本文标题:LeetCode之Longest Valid Parenthes

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