nakashiiiの自由帳

自由に書きます

部分文字列の全探索(キーエンス プログラミング コンテスト 2019 B - KEYENCE String)

部分文字列の抜き出しの仕方が分からなくて困った時に見返すようでメモ。 この解説動画がめちゃくちゃ分かりやすい

www.youtube.com

問題はこちら

atcoder.jp

コード

#include <bits/stdc++.h>
using namespace std;

// 変数宣言------------------
string s;

// メイン------------------
int main() {
  // デバッグ用
  ifstream in("input.txt");
  if (in.is_open()) {
    cin.rdbuf(in.rdbuf());
  }

  cin >> s;
  int n = s.size();
  bool ans = false;

  // i → 何番目から抜き出すか?
  // j → 何番目まで抜き出すか?(jを含まない)
  for (int i = 0; i <= n; i++) {
    for (int j = i; j <= n; j++) {
      string t = s.substr(0, i) + s.substr(j);
      if (s == t) {
        ans = true;
      }
    }
  }

  cout << (ans ? "YES" : "NO") << endl;
}