ABC018-B - 文字列の反転 を解く
ABC018-B - 文字列の反転
与えられた文字列について
指定された区間の部分文字列を反転させる操作を何度か行った結果を求める問題
文章の説明だけではわかりにくいので
実際にどのような操作を行うのかを例で確認してみる
文字列:abcdef
区間:3 5
区間:3 5 は文字列の左から3番目 - 5番目の区間、つまり "cde" を指している
これを反転させると "edc" であり、反転後の文字列は "abedcf" となる
さて、どのように解こうか?
言われた通りの操作をやるだけでよいと思われる
反転処理をPythonでどのように書くかが少し問題だ
文字列は、いったん list型 に変換することで reversed メソッドが使用できる
その後に join メソッドを使って文字列型に戻せばいい
文字列は、list() でラップすることで list型 に変換できる
>>> l=list('abcde') >>> l ['a', 'b', 'c', 'd', 'e']
reversed メソッドは、リストを逆順に並び替えるメソッド
>>> l=['a','b','c','d','e'] >>> l=list(reversed(l)) >>> l ['e', 'd', 'c', 'b', 'a']
join メソッドを使用することで、リストをつなぎあわせて
文字列型に戻すことができる
>>> l ['e', 'd', 'c', 'b', 'a'] >>> l=''.join(l) >>> l 'edcba'
提出したコード
# 入力 S=input() N=int(input()) for i in range(N): l,r=map(int,input().split()) S=S[:l-1]+''.join(list(reversed(S[l-1:r])))+S[r:] # 出力 print(S)
上記の①〜⑥を一行で一気に書いたので読みにくいかも…
リストは 0-index であるので -1 を行っている箇所があるので注意
ややこしいので何度か実験しつつ実装を行った