文字列一致ページの位置づけ
| 項目 | 内容 |
|---|---|
| 必修度 | 必修 |
| 学習目安 | 入門〜標準 |
| 前提 | 文字列・配列 |
| 対象問題 | 117問(推定値あり115問、未算出2問) |
この記事のdifficulty区分は、問題を解く順番を決めるための目安です。AtCoderの公式なA〜F区分ではなく、取得できたdifficulty推定値を次の範囲に分けています。
| 学習目安 | difficulty推定値 | 問題数 |
|---|---|---|
| 入門 | difficulty < 0 | 73 |
| 標準 | 0〜799 | 21 |
| 標準〜発展 | 800〜1199 | 8 |
| 発展 | 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 |
問題文を読んだら、まず「見分け方」のどれに当たるかを一行で記録します。当てはまらない問題は、別のページへ移す判断自体を復習材料にします。





