实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。

如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。

必须原地修改,只允许使用额外常数空间。

以下是一些例子,输入位于左侧列,其相应输出位于右侧列。
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1

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

上期的问题是:86,与所有单词相关联的字串

87,下一个排列_微信公众号

解析:

dict是每个单词出现的次数,在下面的while循环中查找使用,如果查找某个单词的数量大于words中某个单词出现的次数就会终止当前循环。其中words中每个单词的长度都是一样的,wordlen是单个单词的长度,totalLen是words中所有单词的长度,在下面的for和while循环中,相当于每次从源字符串s中截取长度为totalLen的子字符串,然后每次再从子字符串中截取长度为wordLen的字符串存放到found中,当found中某个字符串大于dict中某个字符串的时候终止while循环,否则继续查找,直到查找的长度大于totalLen的时候则终止while循环,然后再对比。如果还是不太明白,for循环中还可以这样写,每次截取长度为totalLen的字符串,然后再把长度为totalLen的字符串分别截取长度为wordLen的字符串,最会在和words中的字符串逐个对比即可。

关注,点赞,评论,转发