Lexicographically minimum string rotation | Set 1 - GeeksforGeeks

11 Jun, 2021
Write code to find lexicographic minimum in a circular array, e.g. for the array BCABDADAB, the lexicographic minimum is ABBCABDAD.Source: Google Written TestMore Examples: 
Input:  GEEKSQUIZ
Output: EEKSQUIZG

Input:  GFG
Output: FGG

Input:  GEEKSFORGEEKS
Output: EEKSFORGEEKSG
Following is a simple solution. Let the given string be ‘str’ 1) Concatenate ‘str’ with itself and store in a temporary string say ‘concat’. 2) Create an array of strings to store all rotations of ‘str’. Let the array be ‘arr’. 3) Find all rotations of ‘str’ by taking substrings of ‘concat’ at index 0, 1, 2..n-1. Store these rotations in arr[] 4) Sort arr[] and return arr[0].
Following is the implementation of above solution. 
C++
Java
Python3
C#
Javascript
// A simple C++ program to find lexicographically minimum rotation// of a given string#include <iostream>#include <algorithm>using namespace std; // This functionr return lexicographically minimum// rotation of strstring minLexRotation(string str){    // Find length of given string    int n = str.length();     // Create an array of strings to store all rotations    string arr[n];     // Create a concatenation of string with itself    string concat = str + str;     // One by one store all rotations of str in array.    // A rotation is obtained by getting a substring of concat    for (int i = 0; i < n; i++)        arr[i] = concat.substr(i, n);     // Sort all rotations    sort(arr, arr+n);     // Return the first rotation from the sorted array    return arr[0];} // Driver program to test above functionint main(){    cout << minLexRotation("GEEKSFORGEEKS") << endl;    cout << minLexRotation("GEEKSQUIZ") << endl;    cout << minLexRotation("BCABDADAB") << endl;}
// A simple Java program to find// lexicographically minimum rotation// of a given Stringimport java.util.*; class GFG{     // This functionr return lexicographically    // minimum rotation of str    static String minLexRotation(String str)    {        // Find length of given String        int n = str.length();         // Create an array of strings        // to store all rotations        String arr[] = new String[n];         // Create a concatenation of        // String with itself        String concat = str + str;         // One by one store all rotations        // of str in array. A rotation is        // obtained by getting a substring of concat        for (int i = 0; i < n; i++)        {            arr[i] = concat.substring(i, i + n);        }         // Sort all rotations        Arrays.sort(arr);         // Return the first rotation        // from the sorted array        return arr[0];    }     // Driver code    public static void main(String[] args)    {        System.out.println(minLexRotation("GEEKSFORGEEKS"));        System.out.println(minLexRotation("GEEKSQUIZ"));        System.out.println(minLexRotation("BCABDADAB"));    }} // This code is contributed by 29AjayKumar
# A simple Python3 program to find lexicographically# minimum rotation of a given string # This function return lexicographically minimum# rotation of strdef minLexRotation(str_) :     # Find length of given string    n = len(str_)     # Create an array of strings to store all rotations    arr = [0] * n     # Create a concatenation of string with itself    concat = str_ + str_     # One by one store all rotations of str in array.    # A rotation is obtained by getting a substring of concat    for i in range(n) :        arr[i] = concat[i : n + i]     # Sort all rotations    arr.sort()     # Return the first rotation from the sorted array    return arr[0] # Driver Codeprint(minLexRotation("GEEKSFORGEEKS"))print(minLexRotation("GEEKSQUIZ"))print(minLexRotation("BCABDADAB")) # This code is contributed by divyamohan123
// A simple C# program to find// lexicographically minimum rotation// of a given Stringusing System; class GFG{     // This functionr return lexicographically    // minimum rotation of str    static String minLexRotation(String str)    {        // Find length of given String        int n = str.Length;         // Create an array of strings        // to store all rotations        String []arr = new String[n];         // Create a concatenation of        // String with itself        String concat = str + str;         // One by one store all rotations        // of str in array. A rotation is        // obtained by getting a substring of concat        for (int i = 0; i < n; i++)        {            arr[i] = concat.Substring(i, n);        }         // Sort all rotations        Array.Sort(arr);         // Return the first rotation        // from the sorted array        return arr[0];    }     // Driver code    public static void Main(String[] args)    {        Console.WriteLine(minLexRotation("GEEKSFORGEEKS"));        Console.WriteLine(minLexRotation("GEEKSQUIZ"));        Console.WriteLine(minLexRotation("BCABDADAB"));    }} // This code is contributed by Rajput-Ji
<script> // A simple Javascript program to find// lexicographically minimum rotation// of a given String // This functionr return lexicographically// minimum rotation of strfunction minLexRotation(str){         // Find length of given String    let n = str.length;     // Create an array of strings    // to store all rotations    let arr = new Array(n);     // Create a concatenation of    // String with itself    let concat = str + str;     // One by one store all rotations    // of str in array. A rotation is    // obtained by getting a substring of concat    for(let i = 0; i < n; i++)    {        arr[i] = concat.substring(i, i + n);    }     // Sort all rotations    arr.sort();     // Return the first rotation    // from the sorted array    return arr[0];} // Driver codedocument.write(minLexRotation("GEEKSFORGEEKS") + "</br>");document.write(minLexRotation("GEEKSQUIZ") + "</br>");document.write(minLexRotation("BCABDADAB") + "</br>"); // This code is contributed by divyeshrabadiya07 </script>
Output: 
EEKSFORGEEKSG
EEKSQUIZG
ABBCABDAD
Lexicographically smallest rotated sequence | Set 2Time complexity of the above solution is O(n2Logn) under the assumption that we have used a O(nLogn) sorting algorithm. This problem can be solved using more efficient methods like Booth’s Algorithm which solves the problem in O(n) time. We will soon be covering these methods as separate posts.This article is contributed by Abhishek. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
29AjayKumar
Rajput-Ji
divyamohan123
divyeshrabadiya07
lexicographic-ordering
rotation
Strings
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Check for Balanced Brackets in an expression (well-formedness) using Stack
Python program to check if a string is palindrome or not
KMP Algorithm for Pattern Searching
Different methods to reverse a string in C/C++
Array of Strings in C++ (5 Different Ways to Create)
Convert string to char array in C++
Longest Palindromic Substring | Set 1
Caesar Cipher in Cryptography
Check whether two strings are anagram of each other
Top 50 String Coding Problems for Interviews