# Minimum rotations required to get the same string

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.

Implementation:

## 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.`

## PHP

 ``

## Javascript

 ``

Output
`3`

Time Complexity: O(n2)
Auxiliary Space : 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 whether it is equal to original string

Implementation:

## 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

## 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)``    ``{``        ``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

## Python3

 `# Python 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``): ` `    ``ans ``=` `0` `# to store the answer``    ``n ``=` `len``(``Str``) ``# length of the String``      ` `    ``# All the length where we can partition``    ``for` `i ``in` `range``(``1` `, ``len``(``Str``) ``-` `1``):` `        ``# right part + left part = rotated String``        ``# we are checking whether the rotated String is equal to ``        ``# original String``        ``if``(``Str``[i: n] ``+` `Str``[``0``: i]  ``=``=` `Str``):``            ``ans ``=` `i``            ``break` `    ``if``(ans ``=``=` `0``):``        ``return` `n``    ``return` `ans` `# Driver code ``Str` `=` `"abc"``print``(findRotations(``Str``))` `# This code is contributed by shinjanpatra`

## 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)``    ``{``        ` `        ``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

## Javascript

 ``

Output
`3`

Time Complexity: O(n2)
Auxiliary Space: O(1)

Alternate Implementation in Python :

## C++

 `// C++ program to determine minimum``// number of rotations required to yield``// same string.``#include ``using` `namespace` `std;` `// Driver program``int` `main()``{``    ``string String = ``"aaaa"``;``    ``string check = ``""``;` `    ``for``(``int` `r = 1; r < String.length() + 1; r++)``    ``{``       ` `        ``// checking the input after each rotation``        ``check = String.substr(0, r) + String.substr(r, String.length()-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){``            ``cout<

## Java

 `/*package whatever //do not write package name here */` `import` `java.io.*;` `class` `GFG {``    ``public` `static` `void` `main (String[] args) {``       ``String string = ``"aaaa"``;``    ``String check = ``""``;` `    ``for``(``int` `r = ``1``; r < string.length() + ``1``; r++)``    ``{``       ` `        ``// checking the input after each rotation``        ``check = string.substring(``0``, r) + string.substring(r, string.length());``    ` `        ``// following if statement checks if input is``        ``// equals to check , if yes it will print r and``        ``// break out of the loop``        ``if``(check.equals(string)){``            ``System.out.println(r);``            ``break``;``        ``}``    ``}``    ``}``}`

## 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.`

## C#

 `// C# program to determine minimum number``// of rotations required to yield same``// string.``using` `System;`` ` `class` `GFG {``    ``// Driver Method``    ``public` `static` `void` `Main()``    ``{``        ``String str = ``"aaaa"``;``        ``String check = ``""``;``        ``for``(``int` `r = 1; r < str.Length + 1; r++)``        ``{``            ` `            ``// checking the input after each rotation``            ``check = str.Substring(0, r) + str.Substring(r, str.Length-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 == str){``                ``Console.Write(r);``                ``break``;``            ``}``        ``}``    ``}``}`` ` `// This code is contributed by Aarti_Rathi`

## Javascript

 ``

Output
`1`

Time Complexity: O(n2), n as length of string
Auxiliary Space: O(n), n as length of string

Previous
Next