📌  相关文章
📜  检查是否可以通过将另一个字符串旋转 2 个位置来获得一个字符串

📅  最后修改于: 2022-05-13 01:57:08.688000             🧑  作者: Mango

检查是否可以通过将另一个字符串旋转 2 个位置来获得一个字符串

给定两个字符串,任务是找出是否可以通过将另一个字符串旋转两个位置来获得一个字符串。

例子:

提问:亚马逊面试

a) 顺时针旋转
b) 逆时针旋转

2-如果顺时针旋转这意味着元素
向右移动。
所以,检查一个子字符串[2…。 len-1] 的
string2 与 substring[0,1] 连接时
string2 等于 string1。然后,返回真。

3-否则,检查它是否逆时针旋转
这意味着元素向左移动。
因此,检查子字符串 [len-2, len-1] 的连接是否
使用 substring[0….len-3] 使其等于
字符串 1。然后返回真。

4-否则,返回false。

下面是上述方法的实现。

C++
// C++ program to check if a string is two time
// rotation of another string.
#include
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


输出:

Yes

练习:检查 string2 是否是通过将 string1 旋转 k 位获得的。