def func(input_str): n = len(input_str) start = 0 flag = 0 for i in range(n): if input_str[i] == "L": if flag == 0: for j in range(start, i+1): input_str[j] = "L" if flag == 1: mid = (i - start + 1) // 2 for j in range(start, start+mid): input_str[j] = "R" for j in range(i-mid+1, i+1): input_str[j] = "L" start = i+1 flag = 0 if input_str[i] == "R": if flag == 0: flag = 1 start = i if flag == 1: for j in range(start, i): input_str[j] = "R" start = i if flag == 1: for j in range(start, n): input_str[j] = "R" for i in range(n): print(input_str[i], end="") print() input_str = list(input()) func(input_str)
""" LR匹配问题,记录之前方向,分4类讨论LL/RL/RR/LR
""" import math if __name__ == "__main__": s = list(input().strip()) ans = s[:] t = pl = pr = 0 flag = '0' while t < len(s): while t < len(s) and s[t] == '.': t += 1 if t >= len(s): break if s[t] == 'L': if flag == '0' or flag == 'L': for i in range(pl, t): ans[i] = 'L' else: pl = t for i in range(pr, math.ceil((pr + pl) / 2)): ans[i] = 'R' for i in range(math.floor((pr + pl) / 2) + 1, pl): ans[i] = 'L' flag = 'L' elif s[t] == 'R': if flag == 'R': for i in range(pr + 1, t): ans[i] = 'R' pr = t flag = 'R' t += 1 if pr > pl: for i in range(pr, len(s)): ans[i] = 'R' print(''.join(ans))
s = input() stat = [(i, char) for i, char in enumerate(s) if char != '.'] stat = [(-1, 'L')] + stat + [(len(s), 'R')] #print() #print(s) for (i,ci), (j, cj) in zip(stat[:-1], stat[1:]): #print(i, j, ci, cj) if ci == cj: if i < 0: s = ci * (j-i) + s[j+1:] elif j == len(s): s = s[:i] + ci * (j-i) + s[j+1:] else: s = s[:i] + ci * (j-i+1) + s[j+1:] #print(s) elif ci > cj: # R > L half = (j-i+1) // 2 rest = (j-i+1) % 2 s = s[:i] + 'R'*half + '.'*rest + 'L'*half + s[j+1:] #print(i, j, s) #print(s, i, j, s[:i], s[j+1:]) #print('LL.RR.LLRRRLLL.') print(s)参考LEETCODE838 https://leetcode.com/articles/push-dominoes/