AtCoder ABC 223 B – String Shifting Python解説

スポンサーリンク

String Shifting

空でない文字列に対し、先頭の文字を末尾に移動する操作を左シフト、末尾の文字を先頭に移動する操作を右シフトと呼びます。
例えば、abcde に対して左シフトを 1 回行うと bcdea となり、右シフトを 2 回行うと deabc となります。
英小文字からなる空でない文字列 S が与えられます。S に対し左シフトと右シフトをそれぞれ好きな回数(0 回でもよい)行って得られる文字列のうち、辞書順で最小のものと最大のものを求めてください。

AtCoder Beginner Contest「String Shifting」

辞書順で最小、最大となる文字列を求めます。文字列は左シフト、右シフトを使ってできる組み合わせを全探索していきます。すべての組み合わせを探索するため、左シフト、右シフトはどちらか片方だけ使えば大丈夫です。

そして、すべての組み合わせを配列に格納していき、最後にソートを使って、辞書順で最小、最大となる文字列を求めます。

s = input()

a = []

for _ in range(len(s)):
    s = s[1:] + s[0]
    a.append(s)
    
a = sorted(a)

print(a[0])
print(a[-1])

左シフトを使って文字列の組み合わせを調べていきます。左シフトは先頭の文字を末尾に移動するので、s = s[1:] + s[0]と書き、出来上がった文字列を配列aに格納していきます。

配列aをソートすれば辞書順で最小、最大の文字列を求めることができるので、最後にa[0], a[-1]で配列の最小と最大を出力して完了です。

s = input()

a = []

for _ in range(len(s)):
    s = s[1:] + s[0]
    a.append(s)
    
a = sorted(a)

print(min(a))
print(max(a))

a[0], a[-1]以外にも、min関数とmax関数を使うことで、配列aに格納された文字列の最小と最大を求めることができます。

AtCoderB問題

Posted by cheese