Python 中修改后的字符串的最终状态
pythonserver side programmingprogramming更新于 2025/10/17 15:40:17
假设我们有一个字符串 S。长度为 n。这 n 个框彼此相邻,位置 i 处的字符 R 表示第 i 个框被推向右侧。类似地,位置 i 处的 L 表示第 i 个框被推向左侧,点 '.' 表示空白处。从初始配置开始,在每个时间单位,被推向右侧的框能够将下一个框推向右侧,左侧也可以应用相同的操作。当没有更多移动可行时,我们必须找到所有盒子的最终位置。
因此,如果输入为 R..R...L.,则输出将为 RRRRR.LL。
为了解决这个问题,我们将遵循以下步骤 −
- N := 字符串大小
- 移动 := 大小为 N 的数组,用 0 填充
- m := 0
- 对于 0 到 N 范围内的 i,执行
- 如果 string[i] 与 'R' 相同,则
- m := N
- 否则,当 string[i] 与 'L' 相同时,则
- m := 0
- 否则,
- m := m - 1 中的最大值,0
- movement[i] := movement[i] + m
- 如果 string[i] 与 'R' 相同,则
- m := 0
- 对于范围 N - 1 到 -1 中的 i,减少 1,执行
- 如果 string[i] 与 'L' 相同,则
- m := N
- 否则,当 string[i] 与 'R' 相同时,则
- m := 0
- 否则,
- m := m 的最大值 - 1, 0
- movement[i] := movement[i] - m
- 如果 string[i] 与 'L' 相同,则
- 如果 m 为 0,则通过添加点来生成字符串,否则当 m > 0 时返回 'R',否则对于 movement 中的每个元素 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.
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

