สมมติว่าเรามี s เป็นสตริง เราต้องหาสตริงย่อยสุดท้ายของ s ตามลำดับศัพท์
ดังนั้น หากอินพุตเป็นเหมือน "abbbcabbc" ผลลัพธ์จะเป็น "cabbc"
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ผม :=0,j :=1,k :=0
-
ขณะที่ j + k <ขนาดของ s ทำ &minsu;
-
ถ้า s[i + k] เหมือนกับ s[j + k] แล้ว −
-
(เพิ่ม k ขึ้น 1)
-
ละเว้นส่วนต่อไปนี้ ข้ามไปยังการทำซ้ำถัดไป
-
-
ถ้า s[i + k]
-
ผม :=เจ
-
(เพิ่มขึ้น j โดย 1)
-
-
มิฉะนั้น
-
j :=j + k + 1
-
-
k :=0
-
ส่งคืนสตริงย่อยของ s จากดัชนี i ไปยังจุดสิ้นสุด
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; class Solution { public: string lastSubstring(string s) { int i = 0; int j = 1; int k = 0; while(j + k < s.size()){ if(s[i + k] == s[j + k]) { k++; continue; } if(s[i + k] < s[j + k]){ i = j; j++; }else{ j = j + k + 1; } k = 0; } return s.substr(i, s.size() - i); } }; main(){ Solution ob; cout << (ob.lastSubstring("abbbcabbc")); }
อินพุต
"abbbcabbc"
ผลลัพธ์
cabbc