いむらや競プロ雑記

キーワード:競プロ、育児、石川県

ABC076 C - Dubious Document 2

atcoder.jp

そもそも全パターン試さないといけないことに気づかず、WA連発していたが、 気づいたところで、なかなか実装し切れなかった。 意外とPythonでの文字列の置換や結合でハマったのでメモ。

  • 文字列に対して、部分の置き換えはできない
    • replaceを使えばできるが、開始位置の指定はできない
  • 文字列のままでも、スライスを使って
     ①置換対象の前+②置換後文字列+③置換対象の後
    と組み合わせてあげればよいが、添え字で混乱するので苦手
  • 一度リストにして、置換後文字列を投げ込んで、また文字列に戻すのが、可読性いい気がする(個人の好みです)
  • (同じ長さの)複数文字列から1文字ずつ取り出して、それぞれ突き合わせるようなときは、for in にzip組み合わせると便利
def resolve():
  S=input()
  T=input()

  cand=[]
  for i in range(len(S)-len(T)+1):
    temp=S[i:i+len(T)]
    isMatch=True
    for (s,t) in zip(temp,T):
      if(s!=t and s!="?"):
        isMatch=False
    if isMatch:
      tempS=list(S)
      tempS[i:i+len(T)]=T
      tempS="".join(tempS)
      tempS=tempS.replace("?","a")
      cand.append(tempS)

  if len(cand)==0:
    print("UNRESTORABLE")  
  else:
    cand.sort()
    print(cand[0])