在Python中获取动物停止时的最终位置的程序

在Python中获取动物停止时的最终位置的程序

假设我们有一个字符串s,表示动物的初始状态。每只动物可以取三个值之一:L表示动物向左移动,R表示动物向右移动,@表示动物静止不动。向某个方向移动的动物将拾取其他动物,除非该动物受到来自相反方向的力。然后它将保持原地。我们必须找到每只动物在动物停止移动时的朝向。

因此,如果输入是s =“@@L@R@@@@L”,则输出将为“LLL@RRRLLL”。

为了解决这个问题,我们将按照以下步骤进行:

  • levels:大小与s相同且填有-1的列表

  • q:双端队列

  • 对于范围0到s大小的idx,做如下操作:

    • 如果s [idx]与“R”相同或s [idx]与“L”相同,则
      • 将(idx,0,s [idx])插入q的末尾
  • l:s字符的新字符列表

  • 当q不为空时,执行如下操作:

    • (idx,new_level,dir):q的左侧元素,并从q中删除它

    • 如果levels [idx]等于-1,则

      • levels [idx]:= new_level

      • l [idx]:= dir

      • 如果dir与“R”相同且idx + 1

      • 将idx + 1,new_level + 1,dir插入q的末尾

      • 否则,当dir等于“L”且idx-1> = 0时,则

      • 将(idx-1,new_level + 1,dir)插入q的末尾

    • 否则,当levels [idx]等于new_level时,则

      • 如果l [idx]与dir不同,则

      • l [idx]:“@”

  • 通过连接l的元素返回一个字符串

更多Python相关文章,请阅读:Python 教程

例子

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

from collections import deque
class Solution:
   def solve(self, s):
      levels = [-1 for i in s]
      q = deque()
      for idx in range(len(s)):
         if s[idx] == "R" or s[idx] == "L":
            q.append((idx, 0, s[idx]))
      l = list(s)
      while q:
         idx, new_level, dir = q.popleft()
         if levels[idx] == -1:
            levels[idx] = new_level
            l[idx] = dir
            if dir == "R" and idx + 1 < len(l):
               q.append((idx + 1, new_level + 1, dir))
            elif dir == "L" and idx - 1 >= 0:
               q.append((idx - 1, new_level + 1, dir))
         elif levels[idx] == new_level:
            if l[idx] != dir:
               l[idx] = "@"
      return "".join(l)
ob = Solution()
s = "@@L@R@@@@L"
print(ob.solve(s))

输入

"@@L@R@@@@L"

输出

LLL@RRRLLL

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程