🐷
ABC374ABを理解し、取り出し可能にする
記事の概要
ABC374に参加しましたが、AとBのスピードが遅かったため、改善策を記載します。
Cに関しては大方解説通りに解けたので割愛します。
対象読者
Atcoder灰色の方
ABC 374
A
問題概要
文字列の末尾が"san"であるかを判定する。
コンテスト中の方針
後ろからループを回して最後の文字のindex-1がn、最後の文字のindex-2がa、最後の文字のindex-3がsであるかを判定
提出コード
4分かかりました。もっと短縮できる。
どうすれば時間短縮できたか?
substrで末尾3文字を取得し、判定を行えばコード量を大幅に短縮できる。
B
問題概要
S,Tを比較して同じ文字列なら0、異なる場合は異なった場所の位置を出力。途中まで同じ文字列でサイズが異なった場合は、小さい方の文字列の位置+1を出力
コンテスト中の方針
問題概要とそのままコードに落とし込みました。
提出コード
約15分かかりました。
どうすれば時間短縮できたか?
番兵方を使い、SとTの末尾にありえない文字列($とする)を1文字だけ追加する。
これによって、提出コードのような異なる文字になった場合に配列外参照対応のためにロジックを切り分ける必要がなくなる。
全て同じなら0を出力すればよい。
Discussion