C++程序:查找需要重新排列多少字符才能将字符串排序


假设我们有一个包含n个字符的字符串S。S只包含小写字母。我们必须选择一个范围在0到n之间的数字k,然后从S中选择k个字符并以任意顺序排列它们。在此过程中,其余字符将保持不变。我们只执行此整个操作一次。我们必须找到k的值,以便S按字母顺序排序。

因此,如果输入类似于S = "acdb",则输出将为3,因为'a'位于正确的位置,其余字符应该重新排列。

步骤

为了解决这个问题,我们将遵循以下步骤:

n := size of S
d := S
sort the array d
j := 0
for initialize i := 0, when i < n, update (increase i by 1), do:
   if S[i] is not equal to d[i], then:
      (increase j by 1)
return j

示例

让我们看看下面的实现,以便更好地理解:

#include <bits/stdc++.h>
using namespace std;

int solve(string S) {
   int n = S.size();
   string d = S;
   sort(d.begin(), d.end());
   int j = 0;
   for (int i = 0; i < n; i++) {
      if (S[i] != d[i])
         j++;
   }
   return j;
}

int main() {
   string S = "acdb";
   cout << solve(S) << endl;
}

输入

"acdb"

输出

3

更新于:2022年3月3日

浏览量:144

开启你的职业生涯

完成课程获得认证

开始学习
广告