辞書順最小を目指すためにはなるべく前のほうに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))