# Lexicographical Maximum substring of string

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 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 index = new List();           // 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.

Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!

Previous
Next