How do you check for a string rotation in python?

def isRotation[s1, s2]:
    return len[s1] == len[s2] and s2 in s1*2
isRotation["ABCD", "CDAB"]
>> True

The code above was given as one of many ways to check if two strings are a rotation of each other. However, I don't understand why String1[s1] has to be multiplied by 2 in the code.

asked Feb 15, 2021 at 12:38

1

In python, multiplying strings is repeating the string, for example:

>>> 'abc'*2
'abcabc'
>>> 'abc'*4
'abcabcabcabc'

So in order to know if a string is a rotation of another string, you would need to multiplie it by 2, for example:

>>> 'bca' in 'abc'
False
>>> 'bca' in 'abc' * 2
True

answered Feb 15, 2021 at 12:43

Roy CohenRoy Cohen

1,4901 gold badge4 silver badges21 bronze badges

Multiplying a string by 2 will double the original string. And because s1 wraps around, regardless of its starting position the whole string can be found somewhere within twice its length

ABCDABCD
|||| DABC
||| CDAB
|| BCDA
| ABCD

answered Feb 15, 2021 at 12:43

Reti43Reti43

9,4453 gold badges26 silver badges44 bronze badges

Rotating a string is as good as chopping it at point of rotation and putting that chopped part at the end of string.

ABCDEFGH rotated 4 places to left is:

  1. Chop at 4-> ABCD EFGH
  2. Place at the end -> EFGHABCD

Python str*x gives you str concatenated to itself x times.

>>> a = 'String'
>>> a*2
'StringString'
>>> 

Putting these two points together with the fact that any string can be rotated by maximum amount equal to its length [when it becomes the original string] gives you the logic to check the rotated string's presence in str*2.

answered Feb 15, 2021 at 12:48

lllrnr101lllrnr101

2,1782 gold badges3 silver badges14 bronze badges

Understanding of your question is- To compare a string with the rotation string.

My approach to address the same would be.

1- To get the rotation string.

def rotate_str[strg, n]:
    return strg[n:] + strg[:n]

length = 2 #can change this to whatever value suits to you or even pass this as arg.
print[rotate['SAMPLE', length]] 

2- compare strings.

   str1 = 'SAMPLE'
   str2 = rotate[str1, length]
   def compare_str[str1, str2]:
       return str1 == str2

answered Feb 15, 2021 at 14:10

mkranamkrana

4024 silver badges10 bronze badges

Here when we multiply s1 with 2. It returns s1s1 like if s1="ABCD", it will return "ABCDABCD", and in if s2 in s1*2 we are checking that if "CRAB" is in "ABCDABCD" which is true.

answered Feb 15, 2021 at 12:46

View Discussion

Improve Article

Save Article

  • Read
  • Discuss
  • View Discussion

    Improve Article

    Save Article

    Given a string s1 and a string s2, write a function to check whether s2 is a rotation of s1. 

    Examples: 

    Input: S1 = ABCD, S2 = CDAB
    Output: Strings are rotations of each other

    Input: S1 = ABCD, S2 = ACBD
    Output: Strings are not rotations of each other

    Naive Approach: Follow the given steps to solve the problem

    • Find all the positions of the first character of the original string in the string to be checked.
    • For every position found, consider it to be the starting index of the string to be checked.
    • Beginning from the new starting index, compare both strings and check whether they are equal or not.
    • [Suppose the original string to is s1, string to be checked to be s2,n is the length of strings and j is the position of the first character of s1 in s2, then for i < [length of original string] , check if s1[i]==s2[[j+1]%n]. Return false if any character mismatch is found, else return true.
    • Repeat 3rd step for all positions found.

    Below is the implementation of the above approach:

    C++

    #include

    using namespace std;

    bool checkString[string& s1, string& s2, int indexFound,

                     int Size]

    {

        for [int i = 0; i < Size; i++] {

            if [s1[i] != s2[[indexFound + i] % Size]]

                return false;

        }

        return true;

    }

    int main[]

    {

        string s1 = "abcd";

        string s2 = "cdab";

        if [s1.length[] != s2.length[]] {

            cout

    Javascript

        function areRotations[ str1,  str2]

        {

            return [str1.length == str2.length] &&

                   [[str1 + str1].indexOf[str2] != -1];

        }

            var str1 = "AACD";

            var str2 = "ACDA";

            if [areRotations[str1, str2]]

                document.write["Strings are rotations of each other"];

            else

                document.write["Strings are not rotations of each other"];

    Output

    Strings are rotations of each other

    Time Complexity: O[N], where N is the length of the string.
    Auxiliary Space: O[N]


    How do you check if a String is rotating to another String in Python?

    [Suppose the original string to is s1, string to be checked to be s2,n is the length of strings and j is the position of the first character of s1 in s2, then for i < [length of original string] , check if s1[i]==s2[[j+1]%n]. Return false if any character mismatch is found, else return true.

    How do you rotate a String in Python?

    Approach is very simple, Separate string in two parts first & second, for Left rotation Lfirst = str[0 : d] and Lsecond = str[d :]. For Right rotation Rfirst = str[0 : len[str]-d] and Rsecond = str[len[str]-d : ]. Now concatenate these two parts second + first accordingly.

    What is rotation of a String?

    A String is said to be a rotation of another String, if it has the same length, contains the same characters, and they were rotated around one of the characters. For example, String"bcda" is a rotation of "abcd" but "bdca" is not a rotation of String "abcd".

    Is there a rotate command in Python?

    rotate is undoable, NOT queryable, and NOT editable. The rotate command is used to change the rotation of geometric objects. The rotation values are specified as Euler angles [rx, ry, rz]. ... .

    Chủ Đề