# Lexicographical Maximum substring of string

• Difficulty Level : Medium
• Last Updated : 17 Aug, 2022

Given a string s we have to find the lexicographical maximum substring of a string

Examples:

```Input : s = "ababaa"
Output : babaa
Explanation : "babaa" is the maximum lexicographic substring formed from this string

Input : s = "asdfaa"
Output : sdfaa```

The idea is simple, we traverse through all substrings. For every substring, we compare it with the current result and update the result if needed.

Below is the implementation:

## C++

 `// CPP program to find the lexicographically` `// maximum substring.` `#include ` `using` `namespace` `std;`   `string LexicographicalMaxString(string str)` `{` `    ``// loop to find the max lexicographic` `    ``// substring in the substring array` `    ``string mx = ``""``;` `    ``for` `(``int` `i = 0; i < str.length(); ++i)` `        ``mx = max(mx, str.substr(i));`   `    ``return` `mx;` `}`   `// Driver code` `int` `main()` `{` `    ``string str = ``"ababaa"``;` `    ``cout << LexicographicalMaxString(str);` `    ``return` `0;` `}`

## Java

 `// Java program to find the lexicographically` `// maximum substring.`   `class` `GFG {`   `    ``static` `String LexicographicalMaxString(String str)` `    ``{` `        ``// loop to find the max lexicographic` `        ``// substring in the substring array` `        ``String mx = ``""``;` `        ``for` `(``int` `i = ``0``; i < str.length(); ++i) {` `            ``if` `(mx.compareTo(str.substring(i)) <= ``0``) {` `                ``mx = str.substring(i);` `            ``}` `        ``}`   `        ``return` `mx;` `    ``}`   `    ``// Driver code` `    ``public` `static` `void` `main(String[] args)` `    ``{` `        ``String str = ``"ababaa"``;` `        ``System.out.println(LexicographicalMaxString(str));` `    ``}` `}` `// This code is contributed by 29AjayKumar`

## Python3

 `# Python 3 program to find the` `# lexicographically maximum substring.` `def` `LexicographicalMaxString(``str``):` `    `  `    ``# loop to find the max lexicographic ` `    ``# substring in the substring array` `    ``mx ``=` `""` `    ``for` `i ``in` `range``(``len``(``str``)):` `        ``mx ``=` `max``(mx, ``str``[i:])`   `    ``return` `mx`   `# Driver code` `if` `__name__ ``=``=` `'__main__'``:` `    ``str` `=` `"ababaa"` `    ``print``(LexicographicalMaxString(``str``))` `    `  `# This code is contributed by` `# Sanjit_Prasad`

## C#

 `// C# program to find the lexicographically` `// maximum substring.`   `using` `System;` `public` `class` `GFG {`   `    ``static` `String LexicographicalMaxString(String str)` `    ``{` `        ``// loop to find the max lexicographic` `        ``// substring in the substring array` `        ``String mx = ``""``;` `        ``for` `(``int` `i = 0; i < str.Length; ++i) {` `            ``if` `(mx.CompareTo(str.Substring(i)) <= 0) {` `                ``mx = str.Substring(i);` `            ``}` `        ``}`   `        ``return` `mx;` `    ``}`   `    ``// Driver code` `    ``public` `static` `void` `Main()` `    ``{` `        ``String str = ``"ababaa"``;` `        ``Console.WriteLine(LexicographicalMaxString(str));` `    ``}` `}`   `// This code is contributed by 29AjayKumar`

## Javascript

 ``

Output

`babaa`

Complexity Analysis:

• Time complexity : O(n2
• Auxiliary Space : O(n)

Optimization: We find the largest character and all its indexes. Now we simply traverse through all instances of the largest character to find lexicographically maximum substring.

Here we follow the above approach.

## C++

 `// C++ program to find the lexicographically` `// maximum substring.` `#include ` `using` `namespace` `std;`   `string LexicographicalMaxString(string str)` `{` `    ``char` `maxchar = ``'a'``;` `    ``vector<``int``> index;`   `    ``// We store all the indexes of maximum` `    ``// characters we have in the string` `    ``for` `(``int` `i = 0; i < str.length(); i++) {` `        ``if` `(str[i] >= maxchar) {` `            ``maxchar = str[i];` `            ``index.push_back(i);` `        ``}` `    ``}` `    ``string maxstring = ``""``;`   `    ``// We form a substring from that maximum` `    ``// character index till end and check if` `    ``// its greater that maxstring` `    ``for` `(``int` `i = 0; i < index.size(); i++) {` `        ``if` `(str.substr(index[i], str.length()) > maxstring) {` `            ``maxstring = str.substr(index[i], str.length());` `        ``}` `    ``}` `    ``return` `maxstring;` `}`   `// Driver code` `int` `main()` `{` `    ``string str = ``"acbacbc"``;` `    ``cout << LexicographicalMaxString(str);` `    ``return` `0;` `}`

## Java

 `// Java program to find the lexicographically` `// maximum substring.` `import` `java.io.*;` `import` `java.util.*;` `class` `GFG` `{    ` `  ``static` `String LexicographicalMaxString(String str)` `  ``{` `    ``char` `maxchar = ``'a'``;` `    ``ArrayList index = ``new` `ArrayList(); `   `    ``// We store all the indexes of maximum` `    ``// characters we have in the string` `    ``for` `(``int` `i = ``0``; i < str.length(); i++) ` `    ``{` `      ``if` `(str.charAt(i) >= maxchar)` `      ``{` `        ``maxchar = str.charAt(i);` `        ``index.add(i);` `      ``}` `    ``}` `    ``String maxstring = ``""``;`   `    ``// We form a substring from that maximum` `    ``// character index till end and check if` `    ``// its greater that maxstring` `    ``for` `(``int` `i = ``0``; i < index.size(); i++) ` `    ``{` `      ``if` `(str.substring(index.get(i), ` `                        ``str.length()).compareTo( maxstring) > ``0``)` `      ``{` `        ``maxstring = str.substring(index.get(i), ` `                                  ``str.length());` `      ``}` `    ``}` `    ``return` `maxstring;` `  ``}`   `  ``// Driver code` `  ``public` `static` `void` `main (String[] args) ` `  ``{    ` `    ``String str = ``"acbacbc"``;   ` `    ``System.out.println(LexicographicalMaxString(str));` `  ``}` `}`   `// This code is contributed by rag2127.`

## Python3

 `# Python 3 program to find ` `# the lexicographically` `# maximum substring.` `def` `LexicographicalMaxString(st):`   `    ``maxchar ``=` `'a'` `    ``index ``=` `[]`   `    ``# We store all the indexes ` `    ``# of maximum characters we ` `    ``# have in the string` `    ``for` `i ``in` `range``(``len``(st)):` `        ``if` `(st[i] >``=` `maxchar):` `            ``maxchar ``=` `st[i]` `            ``index.append(i)`   `    ``maxstring ``=` `""`   `    ``# We form a substring from that ` `    ``# maximum character index till ` `    ``# end and check if its greater` `    ``# that maxstring` `    ``for` `i ``in` `range``(``len``(index)):` `        ``if` `(st[index[i]: ``len``(st)] > ` `            ``maxstring):` `            ``maxstring ``=` `st[index[i]: ` `                        ``len``(st)]` `    ``return` `maxstring`   `# Driver code` `if` `__name__ ``=``=` `"__main__"``:`   `    ``st ``=` `"acbacbc"` `    ``print``(LexicographicalMaxString(st))`   `# This code is contributed by Chitranayal`

## C#

 `// C# program to find the lexicographically` `// maximum substring.` `using` `System;` `using` `System.Collections.Generic;`   `class` `GFG{` `    `  `static` `string` `LexicographicalMaxString(``string` `str)` `{` `    ``char` `maxchar = ``'a'``;` `    ``List<``int``> index = ``new` `List<``int``>(); ` `    `  `    ``// We store all the indexes of maximum` `    ``// characters we have in the string` `    ``for``(``int` `i = 0; i < str.Length; i++) ` `    ``{` `        ``if` `(str[i] >= maxchar)` `        ``{` `            ``maxchar = str[i];` `            ``index.Add(i);` `        ``}` `    ``}` `    ``string` `maxstring = ``""``;` `    `  `    ``// We form a substring from that maximum` `    ``// character index till end and check if` `    ``// its greater that maxstring` `    ``for``(``int` `i = 0; i < index.Count; i++) ` `    ``{` `        ``if` `(str.Substring(index[i]).CompareTo(maxstring) > 0)` `        ``{` `            ``maxstring = str.Substring(index[i]);` `        ``}` `    ``}` `    ``return` `maxstring;` `}`   `// Driver code` `static` `public` `void` `Main()` `{` `    ``string` `str = ``"acbacbc"``;` `    `  `    ``Console.Write(LexicographicalMaxString(str));` `}` `}`   `// This code is contributed by avanitrachhadiya2155`

## Javascript

 ``

Output

`cbc`

Complexity Analysis:

• Time Complexity: O(n*m) where n is the length of the string and m is the size of index array.
• Auxiliary Space: O(n + m) where n is the length of the string and m is the size of index array.

My Personal Notes arrow_drop_up
Related Articles