我有一个长度和值未知的列表。我只想在每一轮看到“B”后面一次“G”时交换。 例如: 我有一个清单
["B", "G", "G", "B", "G"]
我等着["G", "B", "G", "G", "B"]
但结果=>['G', 'G', 'B', 'G', 'B']
这是 Codeforces 网站上的问题:https://codeforces.com/problemset/problem/266/B
如果有不清楚的地方,请给我一些建议,以提升我的技能。
我尝试过:
item1, item2 = item2, item1
它交换了上一个示例中的前 3 个字符串,不是我想要的“只有两个字符串”
['G', 'G', 'B'...]
,但我等待了['G', 'B', 'G'...]
你能明白吗?
这是我的代码:
# If you find 'G' after 'B' swap them and go through the loop without accessing the last items.
queue_time = list(map(int, input().split()))
queue = queue_time[0]
time = queue_time[-1]
persons = ["B", "G", "G"]
while time > 0:
for i in range(len(persons)-1):
if persons[i] == "B" and persons[i + 1] == "G":
persons[i], persons[i +1] = persons[i +1], persons[i]
if persons[i + 1]:
continue
time -= 1
print(persons)
交换元素后,您希望标记交换的元素。您实际上并不需要为此单独的标记,因为您可以在交换后向前迈出额外的一步:
ppl = list('BGGBG')
just_swapped = False
for i in range(len(ppl - 1)):
if just_swapped:
just_swapped = False
continue
if ppl[i : i + 2] == ['B', 'G']:
ppl[i : i+2] = ppl[i+1 : i-1 : -1]
just_swapped = True
如果您有一个
while
循环而不是 for
循环,您可以删除 just_swapped
并简单地增加索引一次。