Skip to content
Related Articles

Related Articles

Improve Article

Check if a string can be obtained by rotating another string 2 places

  • Difficulty Level : Easy
  • Last Updated : 15 Apr, 2021

Given two strings, the task is to find if a string can be obtained by rotating another string two places. 

Examples: 

Input: string1 = “amazon”, string2 = “azonam” 
Output: Yes 
// rotated anti-clockwise
Input: string1 = “amazon”, string2 = “onamaz” 
Output: Yes 
// rotated clockwise

Asked in: Amazon Interview

1- There can be only two cases:
    a) Clockwise rotated
    b) Anti-clockwise rotated

2- If clockwise rotated that means elements
   are shifted in right.
   So, check if a substring[2.... len-1] of 
   string2 when concatenated with substring[0,1]
   of string2 is equal to string1. Then, return true.

3- Else, check if it is rotated anti-clockwise 
   that means elements are shifted to left.
   So, check if concatenation of substring[len-2, len-1]
   with substring[0....len-3] makes it equals to
   string1. Then return true.

4- Else, return false.

Below is the implementation of the above approach.



C++




// C++ program to check if a string is two time
// rotation of another string.
#include<bits/stdc++.h>
using namespace std;
 
// Function to check if string2 is obtained by
// string 1
bool isRotated(string str1, string str2)
{
    if (str1.length() != str2.length())
        return false;
    if(str1.length()<2){
      return str1.compare(str2) == 0;
    }
    string clock_rot = "";
    string anticlock_rot = "";
    int len = str2.length();
 
    // Initialize string as anti-clockwise rotation
    anticlock_rot = anticlock_rot +
                    str2.substr(len-2, 2) +
                    str2.substr(0, len-2) ;
 
    // Initialize string as clock wise rotation
    clock_rot = clock_rot +
                str2.substr(2) +
                str2.substr(0, 2) ;
 
    // check if any of them is equal to string1
    return (str1.compare(clock_rot) == 0 ||
            str1.compare(anticlock_rot) == 0);
}
 
// Driver code
int main()
{
    string str1 = "geeks";
    string str2 = "eksge";
 
    isRotated(str1, str2) ? cout << "Yes"
                          : cout << "No";
    return 0;
}

Java




// Java program to check if a string is two time
// rotation of another string.
 
class Test
{
    // Method to check if string2 is obtained by
    // string 1
    static boolean isRotated(String str1, String str2)
    {
        if (str1.length() != str2.length())
            return false;
        if(str1.length() < 2)
        {
            return str1.equals(str2);
        }
      
        String clock_rot = "";
        String anticlock_rot = "";
        int len = str2.length();
      
        // Initialize string as anti-clockwise rotation
        anticlock_rot = anticlock_rot +
                        str2.substring(len-2, len) +
                        str2.substring(0, len-2) ;
      
        // Initialize string as clock wise rotation
        clock_rot = clock_rot +
                    str2.substring(2) +
                    str2.substring(0, 2) ;
      
        // check if any of them is equal to string1
        return (str1.equals(clock_rot) ||
                str1.equals(anticlock_rot));
    }
     
    // Driver method
    public static void main(String[] args)
    {
        String str1 = "geeks";
        String str2 = "eksge";
      
        System.out.println(isRotated(str1, str2) ?  "Yes"
                              : "No");
    }
}

Python3




# Python 3 program to check if a string
# is two time rotation of another string.
 
# Function to check if string2 is
# obtained by string 1
def isRotated(str1, str2):
 
    if (len(str1) != len(str2)):
        return False
     
    if(len(str1) < 2):
        return str1 == str2
    clock_rot = ""
    anticlock_rot = ""
    l = len(str2)
 
    # Initialize string as anti-clockwise rotation
    anticlock_rot = (anticlock_rot + str2[l - 2:] +
                                     str2[0: l - 2])
     
    # Initialize string as clock wise rotation
    clock_rot = clock_rot + str2[2:] + str2[0:2]
 
    # check if any of them is equal to string1
    return (str1 == clock_rot or
            str1 == anticlock_rot)
 
# Driver code
if __name__ == "__main__":
     
    str1 = "geeks"
    str2 = "eksge"
if isRotated(str1, str2):
    print("Yes"
else:
    print("No")
 
# This code is contributed by ita_c

C#




using System;
 
// C# program to check if a string is two time
// rotation of another string.
 
public class Test {
    // Method to check if string2 is obtained by
    // string 1
    public static bool isRotated(string str1, string str2)
    {
        if (str1.Length != str2.Length) {
            return false;
        }
 
        if (str1.Length < 2) {
            return str1.Equals(str2);
        }
 
        string clock_rot = "";
        string anticlock_rot = "";
        int len = str2.Length;
 
        // Initialize string as anti-clockwise rotation
        anticlock_rot
            = anticlock_rot
              + str2.Substring(len - 2, len - (len - 2))
              + str2.Substring(0, len - 2);
 
        // Initialize string as clock wise rotation
        clock_rot = clock_rot + str2.Substring(2)
                    + str2.Substring(0, 2);
 
        // check if any of them is equal to string1
        return (str1.Equals(clock_rot)
                || str1.Equals(anticlock_rot));
    }
 
    // Driver code
    public static void Main(string[] args)
    {
        string str1 = "geeks";
        string str2 = "eksge";
 
        Console.WriteLine(isRotated(str1, str2) ? "Yes"
                                                : "No");
    }
}
 
// This code is contributed by Shrikant13

Javascript




<script>
 
// Javascript program to check if a
// string is two time rotation of
// another string.
     
// Method to check if string2 is
// obtained by string 1
function isRotated(str1, str2)
{
    if (str1.length != str2.length)
        return false;
         
    if (str1.length < 2)
    {
        return str1.localeCompare(str2);
    }
   
    let clock_rot = "";
    let anticlock_rot = "";
    let len = str2.length;
   
    // Initialize string as anti-clockwise rotation
    anticlock_rot = anticlock_rot +
                    str2.substring(len - 2, len + 1) +
                    str2.substring(0, len - 1) ;
   
    // Initialize string as clock wise rotation
    clock_rot = clock_rot +
                str2.substring(2, str2.length - 2 + 1) +
                str2.substring(0, 2 + 1);
   
    // Check if any of them is equal to string1
    return (str1.localeCompare(clock_rot) ||
            str1.localeCompare(anticlock_rot));
}
 
// Driver code
let str1 = "geeks";
let str2 = "eksge";
 
document.write(isRotated(str1, str2) ? 
               "Yes" : "No");
 
// This code is contributed by rag2127
 
</script>

Output: 

Yes

Exercise : Check if string2 is obtained by rotating string1 by k places.

Reference : https://www.careercup.com/question?id=5734821229756416
This article is contributed by Sahil Chhabra. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :