210728 字符串移位包含问题

题目描述

对于一个字符串来说,定义一次循环移位操作为:将字符串的第一个字符移动到末尾形成新的字符串。

给定两个字符串 s1 s2 ,要求判定其中一个字符串是否是另一字符串通过若干次循环移位后的新字符串的子串。例如 CDAA 是由 AABCD 两次移位后产生的新串 BCDAA 的子串,而 ABCD ACBD 则不能通过多次移位来得到其中一个字符串是新串的子串。

输入格式

一行,包含两个字符串,中间由单个空格隔开。字符串只包含字母和数字,长度不超过30

输出格式

如果一个字符串是另一字符串通过若干次循环移位产生的新串的子串,则输出true,否则输出false。

样例

样例输入

AABCD CDAA
样例输出

true
数据范围与提示 分类标签

[字符串] [枚举] [普及/提高-]

C++题解代码

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

string a;
string b;
int c;
bool d;


// The main procedure
int main() {
  cin>>a;
  cin>>b;
  for (int i = 0; i < a.size(); i++) {
    d = true;
    for (int j = 0; j < b.size(); j++) {
      c = ((i+j)%a.size());
      if (a[c] != b[j]) {
        d = false;
        break;
      }
    }
    if (d) {
      break;
    }
  }
  if (d) {
    cout<<"true";
  } else {
    cout<<"false";
  }
  return 0;
}

Blockly题解代码图片