Pre_permutation本质
https://leetcode-cn.com/problems/minimum-number-of-operations-to-make-string-sorted/
给定你一个字符串['a'- 'z']
定义一次操作为(一次操作 = 4个步骤):
1,找“最后一个”满足: S[i] < S[i - 1] (即i要尽可能的大)
2,从i往后找 第一个j,满足: S[i, i+1, ..., j] < S[i - 1]
3, swap(S[i - 1], S[j])
4, reverse(S[i], S + n);
问: 你需要操作几次,这个字符串可以变成sorted(当sorted后,你的1 自然是找不到的)
' 一次操作(即4步),非常非常复杂... '
注意,1这一步: 我们只关注S[i-1] 和 S[i]!!! 前面的元素不用管!!
比如: 1 2 3 4 5 1 6 1 7 1 ' 我们需要找到{7, 1}这一对!! 因为他是最后出现的!'
xxxxx 5 1 2 3 4 4 5 5 6 7
i-1 i j
' i后面的,一定是递增的!!! 因为此时第1步已经确定了 '
' S[i, i+1, .., j] < S[i - 1] '
执行3后, xxx 4 1 2 3 4 5 5 5 6 7
我们发现,