สมมติว่าเรามีสตริงตัวพิมพ์เล็ก S ที่มีอักขระ n ตัว เราต้องหาสองสตริงย่อยที่ไม่ว่างเปล่า P และ Q เช่นนั้น -
-
ทั้ง P และ Q เป็นผลสืบเนื่องของ S
-
สำหรับแต่ละดัชนี i S[i] เป็นของหนึ่งใน P และ Q
-
P มีค่าน้อยที่สุดเท่าที่จะเป็นไปได้
ดังนั้น หากอินพุตเป็นเหมือน S ="thelightsaber" ผลลัพธ์จะเป็น 10 เพราะเราต้องการสมุดโน้ตสีแดง 2 เล่ม โน้ตบุ๊กสีเขียว 3 เล่ม และโน้ตบุ๊กสีน้ำเงิน 5 เล่ม
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
c := S sort the array c a := position of (c[0]) in S delete c from S print c[0] and S
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; void solve(string S){ string c = S; sort(c.begin(), c.end()); int a = S.find(c[0]); S.erase(S.begin() + a); cout << c[0] << ", " << S << endl; } int main(){ string S = "thelightsaber"; solve(S); }
อินพุต
"thelightsaber"
ผลลัพธ์
a, thelightsber