pythonのlistで使うpop()

ABC 243 Moves on Binary Tree

"L","R","U"で構成された文字列sから、RやLの後ろにあるUを1対1で消していきたい。
制約:sの文字数 n≦10**6

例:LRULURLURLULULRURRLRULRRRUURRU
→LRRLRRLLRR

失敗例:
RUとLUを、sの文字列が短くならなくなるまで消し続ける。
計算量 = Uの数 x sの文字数 = O(N^2)

while True:
  s = s.replace("RU","")
  s = s.replace("LU","")
  if len(s) == pl:
    break
  else:
    pl = len(s)

→TLE


解説例:
リストを用意。Uがきたらリストの末尾を参照。
末尾がSかTならUは追加せずにpop()する。
計算量O(N)

T = []
for a in s:
  if len(T) == 0:
    T.append(a)
  elif a == "U" and T[-1] != "U":
    T.pop()
  else:
    T.append(a)

popといえばdequeの印象だったが、listでpopもうまく使っていきたい。