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

示例 1:

输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"

示例 2:

输入: ")()())"
输出: 4
解释: 最长有效括号子串为 "()()"

请关注微信公众号“数据结构和算法”,答案下期公布

上期的问题是:87,下一个排列

88,最长有效括号_while循环

解析:

随便找个数组比如{1,2,9,8,7,6,5,0},对照上面的代码写一下就很容易明白了。最上面的while循环是从后往前找出第一个相邻的比当前值小的,所以这里找的是2,第二个while循环是从后边找出第一个比2大的,所以找到的是5,然后2和5进行交换,所以交换的结果是{1,5,9,8,7,6,2,0},但由于交换之后,后面的{9,8,7,6,2,0}实际上都是降序排列,所以要把它反转过来。如果还是不明白可以这样来理解,从后往前找出第一个降序的才能交换,因为0,5,6,7,8,9都是升序,那么在数组中{9,8,7,6,5,0}无论你怎么调换位置都不可能找出比他大的,所以必须要找出一个降序的为止,这里找到的为2,要想找一个比原来大的最小值,只有2和{9,8,7,6,5,0}中大于2的最小的那个值交换,那么就是5,所以这里2和5交换,交换之后后面的值从右往左由于都是升序,所以要把它调换过来才是我们要找的结果。

关注,点赞,评论,转发