假设我们以s作为字符串,我们必须按字典顺序查找s的最后一个子字符串。
因此,如果输入像“ abbbcabbc”,那么输出将是“ cabbc”
为了解决这个问题,我们将遵循以下步骤-
i:= 0,j:= 1,k:= 0
而j + k <s的大小,做&minsu;
j:= j + k + 1
i:= j
(将j增加1)
(将k增加1)
忽略以下部分,跳至下一个迭代
如果s [i + k]与s [j + k]相同,则-
如果s [i + k] <s [j + k],则-
除此以外
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