Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ ค้นหาจำนวนอักขระที่ควรจัดเรียงใหม่เพื่อเรียงลำดับสตริงในรูปแบบการเรียงลำดับ


สมมติว่าเรามีสตริง S ที่มีอักขระ n ตัว S มีเฉพาะตัวพิมพ์เล็กเท่านั้น เราต้องเลือกตัวเลข k ในช่วง 0 ถึง n จากนั้นเลือก k อักขระจาก S และเรียงลำดับตามลำดับใดก็ได้ ในกระบวนการนี้ อักขระที่เหลือจะไม่เปลี่ยนแปลง เราดำเนินการทั้งหมดนี้เพียงครั้งเดียว เราต้องหาค่าของ 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