1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-01-10 18:48:13 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
leetcode-problemset/leetcode-cn/problem (Chinese)/使字符串有序的最少操作次数 [minimum-number-of-operations-to-make-string-sorted].html
2022-03-29 12:43:11 +08:00

54 lines
2.5 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<p>给你一个字符串 <code>s</code> <strong>下标从 0 开始</strong>)。你需要对 <code>s</code> 执行以下操作直到它变为一个有序字符串:</p>
<ol>
<li>找到 <strong>最大下标</strong> <code>i</code> ,使得 <code>1 &lt;= i &lt; s.length</code> 且 <code>s[i] &lt; s[i - 1]</code> 。</li>
<li>找到 <strong>最大下标</strong> <code>j</code> ,使得 <code>i &lt;= j &lt; s.length</code> 且对于所有在闭区间 <code>[i, j]</code> 之间的 <code>k</code> 都有 <code>s[k] &lt; s[i - 1]</code> 。</li>
<li>交换下标为 <code>i - 1</code> 和 <code>j</code> 处的两个字符。</li>
<li>将下标 <code>i</code> 开始的字符串后缀反转。</li>
</ol>
<p>请你返回将字符串变成有序的最少操作次数。由于答案可能会很大,请返回它对 <code>10<sup>9</sup> + 7</code> <strong>取余</strong> 的结果。</p>
<p> </p>
<p><strong>示例 1</strong></p>
<pre><b>输入:</b>s = "cba"
<b>输出:</b>5
<b>解释:</b>模拟过程如下所示:
操作 1i=2j=2。交换 s[1] 和 s[2] 得到 s="cab" ,然后反转下标从 2 开始的后缀字符串,得到 s="cab" 。
操作 2i=1j=2。交换 s[0] 和 s[2] 得到 s="bac" ,然后反转下标从 1 开始的后缀字符串,得到 s="bca" 。
操作 3i=2j=2。交换 s[1] 和 s[2] 得到 s="bac" ,然后反转下标从 2 开始的后缀字符串,得到 s="bac" 。
操作 4i=1j=1。交换 s[0] 和 s[1] 得到 s="abc" ,然后反转下标从 1 开始的后缀字符串,得到 s="acb" 。
操作 5i=2j=2。交换 s[1] 和 s[2] 得到 s="abc" ,然后反转下标从 2 开始的后缀字符串,得到 s="abc" 。
</pre>
<p><strong>示例 2</strong></p>
<pre><b>输入:</b>s = "aabaa"
<b>输出:</b>2
<b>解释:</b>模拟过程如下所示:
操作 1i=3j=4。交换 s[2] 和 s[4] 得到 s="aaaab" ,然后反转下标从 3 开始的后缀字符串,得到 s="aaaba" 。
操作 2i=4j=4。交换 s[3] 和 s[4] 得到 s="aaaab" ,然后反转下标从 4 开始的后缀字符串,得到 s="aaaab" 。
</pre>
<p><strong>示例 3</strong></p>
<pre><b>输入:</b>s = "cdbea"
<b>输出:</b>63</pre>
<p><strong>示例 4</strong></p>
<pre><b>输入:</b>s = "leetcodeleetcodeleetcode"
<b>输出:</b>982157772
</pre>
<p> </p>
<p><strong>提示:</strong></p>
<ul>
<li><code>1 &lt;= s.length &lt;= 3000</code></li>
<li><code>s</code> 只包含小写英文字母。</li>
</ul>