pythonのlistで使うpop()
"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もうまく使っていきたい。