はじめに
前回
おすすめの問題があったらコメントやtwitterでリプ飛して欲しいです。
#29
考えたこと
最初は普通に実装(reverseマシマシ)していましたが、reverseはコストが高いのでうまく処理してあげる必要がある。文字を追加するのは先端か末尾の二つなのでdequeを使うことができる。また、逐一reverseしなくても前後のラベルを作ってreverseのたびに反転させればよい。
from collections import deque
s = deque(input())
q = int(input())
query = [input().split() for _ in range(q)]
reverse = False #前後を判定する
for i in query:
if len(i) == 1:
if reverse:
reverse = False
else:
reverse = True
else:
if reverse:
if i[1] == '1':
s.append(i[2])
else:
s.appendleft(i[2]) #先端にappend
else:
if i[1] == '1':
s.appendleft(i[2]) #先端にappend
else:
s.append(i[2])
if reverse: #reverseが有効ならsを逆にしなければならない
s = reversed(s)
s = ''.join(s)
print(s)
else:
s = ''.join(s)
print(s)
reverseの真偽はもっとうまく処理できると思います。
まとめ
文字列の操作は遅いことを学びました。今回の様に操作する場所が決っている問題は、strよりもlistとかdequeを使った方が良いらしい。ではまた。おやすみなさい。