ABC279 B問題 LOOKUP【C++】

ABC

ABC279のB問題 LOOKUP の回答例です。

実装の概略
連続する部分文字列が存在するかどうかを判定させる問題です。
substr関数と呼ばれる文字列から指定した部分だけを取得できる関数があり、これを利用しています。

C++での回答例です!

#include<bits/stdc++.h>
using namespace std;
#define rep(i, n) for (int i = 0; i < (n); ++i)

int main() {
    string s, t;
    cin >> s >> t;          // 入力の受け取り

    int sl = s.size();      // 受け取った文字列のサイズをslに代入
    int tl = t.size();      // 受け取った文字列のサイズをtlに代入

    // (1)
    rep(i, sl - tl + 1) {
        if (t == s.substr(i, tl)) {
            cout << "Yes" << endl;
            return 0;
        }
    }
    cout << "No" << endl;
    return 0;
}

// (1)の部分を詳しく解説しておきます。
// sとtの値は下記のものとして説明をします。
// s = "voltage"
// t = "tag"
// するとsl = 7, tl = 3ですね。

// sl - tl + 1 = 5なので、iは0 ~ 4まで動きます。
// こうするとsからtl個だけを抜き取った時の全パターンを列挙できるようになります。
// 実際にs.substr(i, tl)で取得しているのは下記のようになります。
// i = 0の場合 vol
// i = 1の場合 olt
// i = 2の場合 lta
// i = 3の場合 tag
// i = 4の場合 age

// substr関数の引数について
// substr(開始位置, 取り出す長さ)

入力例

voltabe
tag

出力結果

Yes

コメント