Mr_HO1A

String Rotation Mockvita

Jun 7th, 2019
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.13 KB | None | 0 0
  1. # Mockvita Question 1 [String Rotation]
  2. # Author : Aman Vishwakarma [L1]
  3. # Utility function to check anagrams
  4. def isAnagram(s1, s2):
  5.     c1 = [0] * 26
  6.     c2 = [0] * 26
  7.     # increase character count
  8.     for i in s1:
  9.         c1[ord(i) - 97] += 1
  10.     for i in s2:
  11.         c2[ord(i) - 97] += 1
  12.     # if the character counts are same, they are anagrams
  13.     if c1 == c2:
  14.         return True
  15.     return False
  16.  
  17. # Utility Function for subAnagrams
  18. def isSubAnagram(originalString, generatedString):
  19.     l = len(originalString)
  20.     start,end = 0,l # For substring []
  21.     while end < len(generatedString):
  22.         subString = originalString[start:end]
  23.         if isAnagram(subString,generatedString):
  24.             return True
  25.         elif subString[-1] not in originalString:
  26.             start+=1
  27.             end+=1
  28.         else:
  29.             start+=1
  30.             end+=1
  31.         return False
  32.  
  33. # Left rotate function
  34. def leftRotation(querry, magnitude):
  35.     return querry[magnitude:]+querry[0:magnitude]
  36. # Right rotate function
  37. def rightRotation(querry,magnitude):
  38.     return leftRotation(querry,len(querry)-magnitude)
  39.  
  40. # Function to get first char
  41. getFirstChar = lambda x : list(x)[0]
  42.  
  43. # Driver Function
  44. def driver(s1,s2,actions):
  45.     forRotation = s1
  46.     # make generated string
  47.     genString = ""
  48.     for action in actions:
  49.         dir,mag = action
  50.         if dir == "L":
  51.             forRotation = leftRotation(forRotation,mag)
  52.             genString+=getFirstChar(forRotation)
  53.         elif dir == "R":
  54.             forRotation = rightRotation(forRotation,mag)
  55.             genString+=getFirstChar(forRotation)
  56.         else:
  57.             continue
  58.     # Show Something useful:
  59.     if isSubAnagram(s2,genString):
  60.         print("True")
  61.     else:
  62.         print("False")
  63.  
  64. if __name__ == '__main__':
  65.     # Main String Defination
  66.     s1 = "firstcharstring"
  67.     # Taking inputs
  68.     actions = []
  69.     originalString = str(input())
  70.     for x in range(int(input())):
  71.         dir,mag = input().split()
  72.         actions.append(tuple([dir.upper(),int(mag)]))
  73.     # Pass everything to driver function
  74.     driver(s1,originalString,actions)
Add Comment
Please, Sign In to add comment