AIで解説 AtCoder攻略 文字列一致

読了 約6分 たびすけ
AIで解説 AtCoder攻略 文字列マッチング

文字列一致ページの位置づけ

項目内容
必修度必修
学習目安入門〜標準
前提文字列・配列
対象問題117問(推定値あり115問、未算出2問)

この記事のdifficulty区分は、問題を解く順番を決めるための目安です。AtCoderの公式なA〜F区分ではなく、取得できたdifficulty推定値を次の範囲に分けています。

学習目安difficulty推定値問題数
入門difficulty < 073
標準0〜79921
標準〜発展800〜11998
発展1200以上13
未算出2

文字単位の走査からKMP法・Z algorithmまで、文字列の一致位置や連続条件を同じ添字処理として練習します。

問題ごとの細かな実装は異なりますが、最初に確認する条件は共通しています。

文字列一致の見分け方

  • 文字列を無限に繰り返す
  • 同じパターンの一致を全開始位置で調べる
  • 単純比較では二重ループになる

文字列一致の実装前チェック

  • 一致位置を周期の余りで表す
  • KMPまたはZ algorithmの添字を確認する
  • 連続回数が周期を一周する条件を確認する

先に確認する文法・ライブラリ

まずは必須Python文法で、入力・配列・条件分岐・ループなどの基本を確認してください。問題に合わせたキュー、ヒープ、二分探索などの選び方は標準ライブラリ・定石にまとめています。

代表問題で実装を確認する

最初の一問として、ABC236 A chukodai公式解説)を解きます。指定された2箇所の文字を入れ替えます。文字列をlistに変換してから添字で交換し、最後にjoinで戻します。

S = list(input().strip())
A, B = map(int, input().split())
S[A - 1], S[B - 1] = S[B - 1], S[A - 1]
print(''.join(S))

交換と出力を含めてO(N)時間・O(N)メモリです。

文字列一致の学ぶ順番

このページでは全件を一度に並べず、difficultyの推定値を目安に代表問題を段階分けしています。難易度が未算出の問題は、制約と出題意図を先に確認します。

まず解く

問題公式解説出題意図difficulty
ABC336 A Long Loong公式解説Official editorial intent is classified as fixed length string insertion.-1289
ABC436 A o-padding公式解説Pad the numeric string on the left with zeroes to the required width.-1226
ABC279 A wwwvvvvvv公式解説Give weight 1 to w and 2 to v and sum the string weight.-1224
ABC236 A chukodai公式解説文字列の指定された2位置の文字を入れ替えて出力する。-1207
ABC388 A ?UPC公式解説入力の先頭大文字にUPCを連結して出力する。-1184

次に解く

問題公式解説出題意図difficulty
ABC264 A "atcoder".substr()公式解説固定文字列の指定区間を切り出す。-1180
ABC189 A Slot公式解説Check whether all three slot symbols are identical.-1145
ABC232 A QQ solver公式解説a×b形式の2桁を文字から整数へ変換して掛け算する。-1137
ABC399 A Hamming Distance公式解説Count positions at which the two strings have different characters.-1129
ABC329 A Spread公式解説Reverse the input string.-1120

挑戦問題

問題公式解説出題意図difficulty
ABC251 A Six Characters公式解説文字列を繰り返して6文字にし、先頭6文字を出力する。-1113
ABC402 A CBC公式解説公式Editorialの方針を cbc string transform として整理する。-1084
ABC382 A Daily Cookie公式解説指定位置以降のクッキー文字数を単純に数える。-1062
ABC358 A Welcome to AtCoder Land公式解説Official editorial intent is classified as string equality.-1054
ABC374 A Takahashi san 2公式解説文字列が指定されたsanで終わるかを判定する。-1054

問題文を読んだら、まず「見分け方」のどれに当たるかを一行で記録します。当てはまらない問題は、別のページへ移す判断自体を復習材料にします。

文字列一致の次に読むページ

スタックとキューで順序を処理するDPで状態と遷移を固定する累積和で区間と差を数える