parameters: (self, start, end)
return_statement: return True
docstring: :type start: str
          :type end: str
          :rtype: bool
docstring_summary: :type start: str
          :type end: str
          :rtype: bool
docstring_tokens: : type start : str : type end : str : rtype : bool
function: def canTransform(self, start, end):
          """
          :type start: str
          :type end: str
          :rtype: bool
          """
          if start.count('X') != end.count('X'):
              return False
          i, j = 0, 0
          while i < len(start) and j < len(end):
              while i < len(start) and start[i] == 'X':
                  i += 1
              while j < len(end) and end[j] == 'X':
                  j += 1
              if (i < len(start)) != (j < len(end)):
                  return False
              elif i < len(start) and j < len(end):
                  if start[i] != end[j] or \
                     (start[i] == 'L' and i < j) or \
                     (start[i] == 'R' and i > j):
                      return False
              i += 1
              j += 1
          return True
function_tokens: def canTransform ( self , start , end ) : if start . count ( 'X' ) != end . count ( 'X' ) : return False i , j = 0 , 0 while i < len ( start ) and j < len ( end ) : while i < len ( start ) and start [ i ] == 'X' : i += 1 while j < len ( end ) and end [ j ] == 'X' : j += 1 if ( i < len ( start ) ) != ( j < len ( end ) ) : return False elif i < len ( start ) and j < len ( end ) : if start [ i ] != end [ j ] or ( start [ i ] == 'L' and i < j ) or ( start [ i ] == 'R' and i > j ) : return False i += 1 j += 1 return True