问题:
方法:
根据题意很容易发现,对"("和")"进行连续计数,当")"数量多于"("数量时子串需结束,如"(()))"情况,所以遍历字符串并根据这一规则,可以获得最长子串的长度的。但是,当出现"(()"情况时,无法统计子串长度,因此可以倒序再次遍历获得正确的子串长度。
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))
}
有问题随时沟通
网友评论