สมมติว่าเรามีสตริง 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