@SomeBottle 在 Leetcode每日一题 —— 3863. 将一个字符串排序的最小操作次数 中发帖

思路
也就是要在不选择整个字串的前提下选择其中的失序子序列进行排序,且因为操作数尽量少,选择的失序子序列要尽量长。 
因为不能选择整个字串,若要选择尽量长的子序列,那就可以考虑最长的真前缀和真后缀了(即不等于字串本身的前后缀)。下面分类讨论: 

操作 1 次的情况:字串中的最小字母在开头或者末尾,这个时候选择最长真后缀或者最长真前缀排序一次即可;
操作 2 次的情况:字串中的最小字母或者最大字母在非开头、非末尾的地方出现了(注意同一个字母可能重复出现),这个时候选择一次真前缀再选择一次真后缀即可;
操作 3 次:字串中的最小字母在末尾且最大字母在开头,这种时候得先选择一次真后缀,然后选择一次真前缀,再选择一次真后缀这样来操作;
无法操作的情况:在上面要操作三次的情况下,整个字串的长度却不足 3。

这样理清后解题的思路就很明显了。 

代码
class Solution {
pub...
 
 
Back to Top