517th, 97.42pts, +0/-1 challenge
Volatility: 378->363
途中で再提出したのとまたchallengeミスしたのが残念(300が通ったので首がつながった
300: SubstringReversal
文字列のある範囲を一回だけ反転できるときの辞書順最小になる交換範囲を答える
現在の位置の文字よりも後ろに辞書順で小さい文字があったら、現在の位置を始点にして交換するのは確定なので、あとは候補を全部出してソートして終わり
class SubstringReversal: def solve(self, S): L = len(S) candidate = [] for i in xrange(L): for j in xrange(i + 1, L): if S[i] > S[j]: candidate.append((S[i:j+1][::-1] + S[j+1:], i, j)) if candidate: candidate.sort() break else: return (0, 0) return (candidate[0][1], candidate[0][2])