leetcode:Next Permutation + Lon…

Next Permutation:
题意是,给定一个字符串,如4123,求出在字典序排列组合下大于它的下一个字符串,上例的答案是4132,4312虽然也大于,但在排列组合中不是紧邻4123的,因此不行。

思路是升序降序
从后往前找,如果一直是升序,说明这个字符串就是字典序下最大的了,没有更大的,按照题目要求,就返回字符序最小的,如输入4321(最大字典序),那么返回1234。
如果遍历过程中,找到第一个非递增的i,num[i] 再把i位置后面的字符串倒置,就能得到刚好大于原字符串的最小字符串,这样的原理是:
假如有字符串cedba,a

Longest Valid Parentheses:
这个是之前括号匹配问题的扩展,给定一个括号字符串如"(()()))(",求出它最长的有效子串。
思路还是用栈,左括号入栈,重点是在处理右括号。
1、如果检测到右括号时栈为空,那么直接检查下一个元素,并把start位移到下一个元素。
2、如果栈刚好有一个元素,那么说明从start到该位置所有括号匹配完毕,检查这个长度是否大于当前最长值。
3、如果栈有不止一个元素,那么说明,从倒数第二个元素的下一个位置到当前位置,所有括号匹配完毕,也可以求得当前的最大匹配长度。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值