C ++中按字典顺序的最后一个子字符串

假设我们以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