Minimum rotations required to get the same string

• Difficulty Level : Medium
• Last Updated : 28 Dec, 2021

Given a string, we need to find the minimum number of rotations required to get the same string.
Examples:

Input : s = "geeks"
Output : 5

Input : s = "aaaa"
Output : 1

The idea is based on below post.
A Program to check if strings are rotations of each other or not
Step 1 : Initialize result = 0 (Here result is count of rotations)
Step 2 : Take a temporary string equals to original string concatenated with itself.
Step 3 : Now take the substring of temporary string of size same as original string starting from second character (or index 1).
Step 4 : Increase the count.
Step 5 : Check whether the substring becomes equal to original string. If yes, then break the loop. Else go to step 2 and repeat it from the next index.

C++

 // C++ program to determine minimum number // of rotations required to yield same // string. #include using namespace std;   // Returns count of rotations to get the // same string back. int findRotations(string str) {     // tmp is the concatenated string.     string tmp = str + str;     int n = str.length();       for (int i = 1; i <= n; i++) {           // substring from i index of original         // string size.         string substring = tmp.substr(i, str.size());           // if substring matches with original string         // then we will come out of the loop.         if (str == substring)             return i;     }     return n; }   // Driver code int main() {     string str = "abc";     cout << findRotations(str) << endl;     return 0; }

Java

 // Java program to determine minimum number // of rotations required to yield same // string.   import java.util.*;   class GFG {     // Returns count of rotations to get the     // same string back.     static int findRotations(String str)     {         // tmp is the concatenated string.         String tmp = str + str;         int n = str.length();               for (int i = 1; i <= n; i++)         {                   // substring from i index of original             // string size.                           String substring = tmp.substring(                       i, i+str.length());                   // if substring matches with original string             // then we will come out of the loop.             if (str.equals(substring))                 return i;         }         return n;     }       // Driver Method     public static void main(String[] args)     {             String str = "aaaa";         System.out.println(findRotations(str));     } } /* This code is contributed by Mr. Somesh Awasthi */

Python3

 # Python 3 program to determine minimum # number of rotations required to yield # same string.   # Returns count of rotations to get the # same string back. def findRotations(str):           # tmp is the concatenated string.     tmp = str + str     n = len(str)       for i in range(1, n + 1):                   # substring from i index of         # original string size.         substring = tmp[i: i+n]           # if substring matches with         # original string then we will         # come out of the loop.         if (str == substring):             return i     return n   # Driver code if __name__ == '__main__':       str = "abc"     print(findRotations(str))   # This code is contributed # by 29AjayKumar.

C#

 // C# program to determine minimum number // of rotations required to yield same // string. using System;   class GFG {           // Returns count of rotations to get     // the same string back.     static int findRotations(String str)     {                   // tmp is the concatenated string.         String tmp = str + str;         int n = str.Length;               for (int i = 1; i <= n; i++)         {                   // substring from i index of             // original string size.                           String substring =                  tmp.Substring(i, str.Length);                   // if substring matches with             // original string then we will             // come out of the loop.             if (str == substring)                 return i;         }                   return n;     }       // Driver Method     public static void Main()     {         String str = "abc";                   Console.Write(findRotations(str));     } }   // This code is contributed by nitin mittal.



Javascript



Output:

3

Time Complexity: O(n2)

Space Complexity : O(2n)  ~ O(n)

We can solve this problem without using any temporary variable as extra space . We will traverse the original string  and at each position we partition it and concatenate the right substring and left substring and check weather it is equal to original string

C++

 // C++ program to determine minimum number // of rotations required to yield same // string. #include using namespace std;   // Returns count of rotations to get the // same string back. int findRotations(string str) {     int ans = 0; //to store the answer       int n = str.length(); //length of the string               //All the length where we can partition       for(int i=1;i

Output

3

Time Complexity : O(n2)

Space Complexity : O(1)

Alternate Implementation in Python :

Python3

 # Python 3 program to determine minimum # number of rotations required to yield # same string.    # input string = 'aaaa' check = ''    for r in range(1, len(string)+1):   # checking the input after each rotation   check = string[r:] + string[:r]        # following if statement checks if input is   # equals to check , if yes it will print r and   # break out of the loop   if check == string:     print(r)     break    # This code is contributed # by nagasowmyanarayanan.

Output:

1

This article is contributed by Jatin Goyal. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.