# A Program to check if strings are rotations of each other or not

Given a string s1 and a string s2, write a snippet to say whether s2 is a rotation of s1?
(eg given s1 = ABCD and s2 = CDAB, return true, given s1 = ABCD, and s2 = ACBD , return false)

Algorithm:
areRotations(str1, str2)

```    1. Create a temp string and store concatenation of str1 to
str1 in temp.
temp = str1.str1
2. If str2 is a substring of temp then str1 and str2 are
rotations of each other.

Example:
str1 = "ABACD"
str2 = "CDABA"

temp = str1.str1 = "ABACDABACD"
Since str2 is a substring of temp, str1 and str2 are
rotations of each other.
```

## C++

 `    `  `// C++ program to check if two given strings ` `// are rotations of  each other ` `# include ` `using` `namespace` `std; ` ` `  `/* Function checks if passed strings (str1 ` `   ``and str2) are rotations of each other */` `bool` `areRotations(string str1, string str2) ` `{ ` `   ``/* Check if sizes of two strings are same */` `   ``if` `(str1.length() != str2.length()) ` `        ``return` `false``; ` ` `  `   ``string temp = str1 + str1;  ` `  ``return` `(temp.find(str2) != string::npos); ` `} ` ` `  `/* Driver program to test areRotations */` `int` `main() ` `{ ` `   ``string str1 = ``"AACD"``, str2 = ``"ACDA"``; ` `   ``if` `(areRotations(str1, str2)) ` `     ``printf``(``"Strings are rotations of each other"``); ` `   ``else` `      ``printf``(``"Strings are not rotations of each other"``); ` `   ``return` `0; ` `} `

## C

 `    `  `// C program to check if two given strings are rotations of  ` `// each other ` `# include ` `# include ` `# include ` ` `  `/* Function checks if passed strings (str1 and str2) ` `   ``are rotations of each other */` `int` `areRotations(``char` `*str1, ``char` `*str2) ` `{ ` `  ``int` `size1   = ``strlen``(str1); ` `  ``int` `size2   = ``strlen``(str2); ` `  ``char` `*temp; ` `  ``void` `*ptr; ` ` `  `  ``/* Check if sizes of two strings are same */` `  ``if` `(size1 != size2) ` `     ``return` `0; ` ` `  `  ``/* Create a temp string with value str1.str1 */` `  ``temp   = (``char` `*)``malloc``(``sizeof``(``char``)*(size1*2 + 1)); ` `  ``temp = ``''``; ` `  ``strcat``(temp, str1); ` `  ``strcat``(temp, str1); ` ` `  `  ``/* Now check if str2 is a substring of temp */` `  ``ptr = ``strstr``(temp, str2); ` ` `  `  ``free``(temp); ``// Free dynamically allocated memory ` ` `  `  ``/* strstr returns NULL if the second string is NOT a ` `    ``substring of first string */` `  ``if` `(ptr != NULL) ` `    ``return` `1; ` `  ``else` `    ``return` `0; ` `} ` ` `  `/* Driver program to test areRotations */` `int` `main() ` `{ ` `    ``char` `*str1 = ``"AACD"``; ` `    ``char` `*str2 = ``"ACDA"``; ` ` `  `    ``if` `(areRotations(str1, str2)) ` `       ``printf``(``"Strings are rotations of each other"``); ` `    ``else` `       ``printf``(``"Strings are not rotations of each other"``); ` ` `  `    ``getchar``(); ` `    ``return` `0; ` `} `

## Java

 `   `  `// Java program to check if two given strings are rotations of  ` `// each other ` ` `  `class` `StringRotation ` `{ ` `    ``/* Function checks if passed strings (str1 and str2) ` `       ``are rotations of each other */` `    ``static` `boolean` `areRotations(String str1, String str2) ` `    ``{ ` `        ``// There lengths must be same and str2 must be  ` `        ``// a substring of str1 concatenated with str1.   ` `        ``return` `(str1.length() == str2.length()) && ` `               ``((str1 + str1).indexOf(str2) != -``1``); ` `    ``} ` `     `  `    ``// Driver method ` `    ``public` `static` `void` `main (String[] args) ` `    ``{ ` `        ``String str1 = ``"AACD"``; ` `        ``String str2 = ``"ACDA"``; ` ` `  `        ``if` `(areRotations(str1, str2)) ` `            ``System.out.println(``"Strings are rotations of each other"``); ` `        ``else` `            ``System.out.printf(``"Strings are not rotations of each other"``); ` `    ``} ` `} ` `// This code is contributed by  munjal  `

## Python

 `    `  `# Python program to check if strings are rotations of ` `# each other or not ` ` `  `# Function checks if passed strings (str1 and str2) ` `# are rotations of each other ` `def` `areRotations(string1, string2): ` `    ``size1 ``=` `len``(string1) ` `    ``size2 ``=` `len``(string2) ` `    ``temp ``=` `'' ` ` `  `    ``# Check if sizes of two strings are same ` `    ``if` `size1 !``=` `size2: ` `        ``return` `0` ` `  `    ``# Create a temp string with value str1.str1 ` `    ``temp ``=` `string1 ``+` `string1 ` ` `  `    ``# Now check if str2 is a substring of temp ` `    ``# string.count returns the number of occurrences of ` `    ``# the second string in temp ` `    ``if` `(temp.count(string2)> ``0``): ` `        ``return` `1` `    ``else``: ` `        ``return` `0` ` `  `# Driver program to test the above function ` `string1 ``=` `"AACD"` `string2 ``=` `"ACDA"` ` `  `if` `areRotations(string1, string2): ` `    ``print` `"Strings are rotations of each other"` `else``: ` `    ``print` `"Strings are not rotations of each other"` ` `  `# This code is contributed by Bhavya Jain `

## C#

 `// C# program to check if two given strings ` `// are rotations of each other ` `using` `System; ` ` `  `class` `GFG { ` `     `  `    ``/* Function checks if passed strings ` `    ``(str1 and str2) are rotations of ` `    ``each other */` `    ``static` `bool` `areRotations(String str1, ` `                                 ``String str2) ` `    ``{ ` `         `  `        ``// There lengths must be same and ` `        ``// str2 must be a substring of ` `        ``// str1 concatenated with str1.  ` `        ``return` `(str1.Length == str2.Length ) ` `             ``&& ((str1 + str1).IndexOf(str2) ` `                                     ``!= -1); ` `    ``} ` `     `  `    ``// Driver method ` `    ``public` `static` `void` `Main () ` `    ``{ ` `        ``String str1 = ``"FGABCDE"``; ` `        ``String str2 = ``"ABCDEFG"``; ` ` `  `        ``if` `(areRotations(str1, str2)) ` `            ``Console.Write(``"Strings are"` `            ``+ ``" rotation s of each other"``); ` `        ``else` `            ``Console.Write(``"Strings are "` `           ``+ ``"not rotations of each other"``); ` `    ``} ` `} ` ` `  `// This code is contributed by nitin mittal. `

## PHP

 ` 0) ` `{ ` `        ``return` `true; ` `} ` `else` `{ ` `    ``return` `false; ` `} ` `} ` ` `  `// Driver code ` `\$str1` `= ``"AACD"``; ` `\$str2` `= ``"ACDA"``; ` `if` `(areRotations(``\$str1``, ``\$str2``)) ` `{ ` `    ``echo` `"Strings are rotations "``.  ` `                  ``"of each other"``; ` `} ` `else` `{ ` `    ``echo` `"Strings are not "` `.  ` `         ``"rotations of each other"` `; ` `} ` ` `  `// This code is contributed ` `// by Shivi_Aggarwal. ` `?> `

Output:

`Strings are rotations of each other`

Library Functions Used:
strstr:
strstr finds a sub-string within a string.
Prototype: char * strstr(const char *s1, const char *s2);
See http://www.lix.polytechnique.fr/Labo/Leo.Liberti/public/computing/prog/c/C/MAN/strstr.htm for more details

strcat:
strncat concatenate two strings
Prototype: char *strcat(char *dest, const char *src);
See http://www.lix.polytechnique.fr/Labo/Leo.Liberti/public/computing/prog/c/C/MAN/strcat.htm for more details

Time Complexity: Time complexity of this problem depends on the implementation of strstr function.
If implementation of strstr is done using KMP matcher then complexity of the above program is (-)(n1 + n2) where n1 and n2 are lengths of strings. KMP matcher takes (-)(n) time to find a substrng in a string of length n where length of substring is assumed to be smaller than the string.

My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :

20

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.