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

สตริงย่อยสุดท้ายใน Lexicographical Order ใน C ++


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