Lexicographically smallest and largest substring of size k

10 Jun, 2021
Given String str and an integer k, find the lexicographically smallest and largest substring of length kLexicography order, also called as alphabetical order or dictionary order, 
 A < B <... < Y < Z < a < b <.. < y < z
Examples:  
Input : String: hello
        Size: 2
        Distinct Substring: [el, he, ll, lo]
Output : Smallest Substring: el
         Largest Substring: lo

Input : String: geeksforgeeks
        Size: 3
        Distinct Substring: [eek, eks, for, gee, ksf, org, rge, sfo]
Output : Smallest Substring: eek
         Largest Substring: sfo
 
We initialize max and min as first substring of size k. We traverse remaining substrings, by removing first character of previous substring and adding last character of new string. We keep track of the lexicographically largest and smallest.  
C++
Java
Python3
C#
Javascript
// CPP program to find lexicographically// largest and smallest substrings of size k.#include<bits/stdc++.h> using namespace std;     void getSmallestAndLargest(string s, int k)    {                 // Initialize min and max as        // first substring of size k        string currStr = s.substr(0, k);        string lexMin = currStr;        string lexMax = currStr;         // Consider all remaining substrings. We consider        // every substring ending with index i.        for (int i = k; i < s.length(); i++)        {            currStr = currStr.substr(1, k) + s[i];            if (lexMax < currStr)                    lexMax = currStr;            if (lexMin >currStr)                lexMin = currStr;            }         // Print result.        cout << (lexMin) << endl;        cout << (lexMax) << endl;    }     // Driver Code    int main()    {        string str = "GeeksForGeeks";        int k = 3;        getSmallestAndLargest(str, k);    } // This code is contributed by// Sanjit_Prasad
// Java program to find lexicographically largest and smallest// substrings of size k. public class GFG {     public static void getSmallestAndLargest(String s, int k)    {        // Initialize min and max as first substring of size k        String currStr = s.substring(0, k);        String lexMin = currStr;        String lexMax = currStr;          // Consider all remaining substrings. We consider        // every substring ending with index i.        for (int i = k; i < s.length(); i++) {            currStr = currStr.substring(1, k) + s.charAt(i);            if (lexMax.compareTo(currStr) < 0)                     lexMax = currStr;            if (lexMin.compareTo(currStr) > 0)                 lexMin = currStr;                   }         // Print result.        System.out.println(lexMin);        System.out.println(lexMax);    }     // Driver Code    public static void main(String[] args)    {        String str = "GeeksForGeeks";        int k = 3;        getSmallestAndLargest(str, k);    }}
# Python 3 program to find lexicographically# largest and smallest substrings of size k.def getSmallestAndLargest(s, k):         # Initialize min and max as    # first substring of size k    currStr = s[:k]    lexMin = currStr    lexMax = currStr     # Consider all remaining substrings.    # We consider every substring ending    # with index i.    for i in range(k, len(s)):        currStr = currStr[1 : k] + s[i]        if (lexMax < currStr):            lexMax = currStr        if (lexMin >currStr):            lexMin = currStr     # Print result.    print(lexMin)    print(lexMax) # Driver Codeif __name__ == '__main__':    str1 = "GeeksForGeeks"    k = 3    getSmallestAndLargest(str1, k) # This code is contributed by# Surendra_Gangwar
// C# program to find lexicographically// largest and smallest substrings of size k.using System; class GFG{    // Function to compare two strings    static int CompareTo(String s1, String s2)    {        for (int i = 0; i < s1.Length ||                        i < s2.Length; i++)        {            if (s1[i] < s2[i])                return -1;            else if (s1[i] > s2[i])                return 1;        }        return 0;    }     static void getSmallestAndLargest(String s, int k)    {        // Initialize min and max as        // first substring of size k        String currStr = s.Substring(0, k);        String lexMin = currStr;        String lexMax = currStr;         // Consider all remaining substrings.        // We consider every substring        // ending with index i.        for (int i = k; i < s.Length; i++)        {            currStr = currStr.Substring(1, k - 1) + "" + s[i];            if (CompareTo(lexMax, currStr) < 0)                lexMax = currStr;            if (CompareTo(lexMin, currStr) > 0)                lexMin = currStr;        }         // Print result.        Console.WriteLine(lexMin);        Console.WriteLine(lexMax);    }     // Driver Code    public static void Main(String[] args)    {        String str = "GeeksForGeeks";        int k = 3;        getSmallestAndLargest(str, k);    }} // This code is contributed by// sanjeev2552
<script>       // JavaScript program to find lexicographically      // largest and smallest substrings of size k.       function getSmallestAndLargest(s, k) {        // Initialize min and max as        // first substring of size k        var currStr = s.substring(0, k);        var lexMin = currStr;        var lexMax = currStr;         // Consider all remaining substrings.        // We consider every substring        // ending with index i.        for (var i = k; i < s.length; i++) {          currStr = currStr.substring(1, k) + s[i];          if (lexMax < currStr) lexMax = currStr;          if (lexMin > currStr) lexMin = currStr;        }         // Print result.        document.write(lexMin + "<br>");        document.write(lexMax + "<br>");      }       // Driver Code      var str = "GeeksForGeeks";      var k = 3;      getSmallestAndLargest(str, k);       </script>
For
sFo
 
Sanjit_Prasad
SURENDRA_GANGWAR
sanjeev2552
rdtank
sliding-window
Java Programs
Strings
sliding-window
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Factory method design pattern in Java
Java Program to Remove Duplicate Elements From the Array
Iterate through List in Java
Java program to count the occurrence of each character in a string using Hashmap
How to Iterate HashMap in Java?
Write a program to reverse an array or string
Reverse a string in Java
Write a program to print all permutations of a given string
C++ Data Types
Check for Balanced Brackets in an expression (well-formedness) using Stack