Given two strings s1 and s2. The task is to find out the minimum number of string rotations for the given string s1 to obtain the actual string s2. Examples:
Input : eeksg, geeks Output: 1 Explanation: g is rotated left to obtain geeks. Input : eksge, geeks Output: 2 Explanation : e and g are left rotated to obtain geeks.
Approach:
- Use string slicing to rotate the string.
- Perform right rotations str1=str1[1:len(str1)]+str1[0] on string to obtain the actual string.
- Perform left rotations m=m[len(m)-1]+m[:len(m)-1] on string to obtain the actual string.
- Print the minimum of left(x) and right(y) rotations.
TIME COMPLEXITY: O(n) Below is the implementation:
python3
def findRotations(str1, str2):
# To count left rotations
# of string
x = 0
# To count right rotations
# of string
y = 0
m = str1
while True :
# left rotating the string
m = m[ len (m) - 1 ] + m[: len (m) - 1 ]
# checking if rotated and
# actual string are equal.
if (m = = str2):
x + = 1
break
else :
x + = 1
if x > len (str2) :
break
while True :
# right rotating the string
str1 = str1[ 1 : len (str1)] + str1[ 0 ]
# checking if rotated and actual
# string are equal.
if (str1 = = str2):
y + = 1
break
else :
y + = 1
if y > len (str2):
break
if x < len (str2):
# printing the minimum
# number of rotations.
print ( min (x,y))
else :
print ("given strings are not of same kind")
# Driver code findRotations( 'sgeek' , 'geeks' )
|
Output:
1
The Time and Space Complexity for all the methods are the same:
Time Complexity: O(n)
Auxiliary Space: O(n)