s를 문자열로 가지고 있다고 가정하고 사전순으로 s의 마지막 부분 문자열을 찾아야 합니다.
따라서 입력이 "abbbcabbc"와 같으면 출력은 "cabbc"가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
i :=0,j :=1,k :=0
-
동안 j + k
-
s[i + k]가 s[j + k]와 같으면 -
-
(k를 1씩 증가)
-
다음 부분은 무시하고 다음 반복으로 건너뜁니다.
-
-
s[i + k]
-
나는 :=j
-
(j를 1씩 증가)
-
-
그렇지 않으면
-
j :=j + k + 1
-
-
k :=0
-
인덱스 i에서 끝까지 s의 부분 문자열 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예
#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