สมมติว่าเรามีสตริงตัวพิมพ์เล็ก 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