AtCoder Beginner Contest 076 C

beta.atcoder.jp

辞書順最小を目指すためにはなるべく前のほうにaを入れてあげる = Tの検索は後ろから。 |S| - |T|の位置から始めて前に行き、Tの長さだけ? or S[i] = T[i]であることを調べる。 pythonのallはfor / if / flagな文を一つのif分にまとめられるのでとてもきれいに書ける。 似たようなのにanyもある。

この辺りは一撃で使えると気持ちいい。

def solve(S, T):
    for i in reversed(range(0, len(S) - len(T) + 1)):
        if all(S[j] == "?" or S[j] == T[j - i] for j in range(i, i + len(T))):
            return (S[0:i] + T + S[i + len(T):]).replace("?", "a")
    return "UNRESTORABLE"


if __name__ == "__main__":
    S = input()
    T = input()
    print(solve(S, T))