美文网首页
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