少し FizzBuzz チックな判定問題
問題概要
長さ の文字列 と、長さ の文字列 が与えられる。 であることが保証される。
- が の prefix でも suffix でもあるとき:0
- が の prefix であるが suffix ではないとき:1
- が の prefix ではないが suffix ではあるとき:2
- が の prefix でも suffix でもないとき:3
を出力せよ。
制約
解法
判定問題の構造は Fizz Buzz そのもの。よって、次のフラグ変数
prefix
: が の prefix であるかどうかsuffix
: が の suffix であるかどうか
を用意したときに、次のように書ける。
if (prefix && suffix) cout << 0 << endl; else if (prefix) cout << 1 << endl; else if (suffix) cout << 2 << endl; else cout << 3 << endl;
あとは、prefix
と suffix
の判定を行えばよい。
コード
ここでは、部分文字列を取り出す関数 substr()
を活用して判定した。
#include <bits/stdc++.h> using namespace std; int main() { // 入力: T の方が長い int N, M; string S, T; cin >> N >> M >> S >> T; // S が T の接頭辞であるかどうか bool prefix = (T.substr(0, N) == S); // S が T の接尾辞であるかどうか bool suffix = (T.substr(M - N, N) == S); // 出力 if (prefix && suffix) cout << 0 << endl; else if (prefix) cout << 1 << endl; else if (suffix) cout << 2 << endl; else cout << 3 << endl; }