# Minimum rotations required to get the same string

• Difficulty Level : Medium
• Last Updated : 25 Jul, 2022

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

This article is contributed by Aarti_Rathi 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.

My Personal Notes arrow_drop_up
Related Articles