在Python中修改后字符串的最终状态

假设我们有一个字符串S。长度为n。这n个框彼此相邻,位置i处的字符R表示第i个框正向右推动。类似地,位置i处的L表示第i个框被推向左侧,即点“”。表示空白。从初始配置开始,在每个时间单位,向右推动的盒子都可以向右推动下一个盒子,同样的动作也可以应用于左侧。当没有其他动作可行时,我们必须找到所有盒子的最终位置。

因此,如果输入类似于R..R ... L。,则输出将为RRRRR.LL。

为了解决这个问题,我们将遵循以下步骤-

  • N:=字符串大小

  • 运动:=大小为N的数组,以0s填充

  • m:= 0

  • 对于0到N范围内的i,执行

    • m:= m-1,0的最大值

    • m:= 0

    • m:= N

    • 如果string [i]与'R'相同,则

    • 否则,当string [i]与'L'相同时,则

    • 除此以外,

    • 运动[i]:=运动[i] + m

    • m:= 0

    • 对于范围在N-1到-1的i,将其减小1,

      • m:= m-1,0的最大值

      • m:= 0

      • m:= N

      • 如果string [i]与“ L”相同,则

      • 否则,当string [i]与'R'相同时,则

      • 除此以外,

      • 运动[i]:=运动[i]-米

      • 如果m为0,则通过加点来返回字符串;如果m> 0,则为'R';否则,对于运动中的每个元素m为'L'。

      范例程式码

      让我们看下面的实现以更好地理解-

      def get_final_pos(string):
         N = len(string)
         movement = [0] * N
         m = 0
         for i in range(0, N):
            if string[i] == 'R':
               m = N
            elif string[i] == 'L':
               m = 0
            else:
               m = max(m - 1, 0)
            movement[i] += m
         m = 0
         for i in range(N - 1, -1, -1):
            if string[i] == 'L':
               m = N
            elif string[i] == 'R':
               m = 0
            else:
               m = max(m - 1, 0)
            movement[i] -= m
      return "".join('.' if m == 0 else 'R' if m > 0 else 'L' for m in movement)
      print(get_final_pos('R..R...L.'))

      输入值

      'R..R...L.'

      输出结果

      RRRRR.LL.
      猜你喜欢