一,問題描述
二,問題分析
暴力循環破解,我們採用一個集合記錄下字符串的所有環串的形式,在通過比較輸入的字符串是否存在與集合中,如果存在,ans++
三,問題解答
#include<iostream>
#include<string>
#include<vector>
#include<set>
using namespace std;
set<string> allstring(string str) { //得到str所有的環串
string temp = str;
set<string> vec;
for (int i = 0; i < str.size(); i++) {
for (int j = 0; j < str.size(); j++) {
temp[j] = str[(j + i) % str.size()];
}
vec.insert(temp);
}
return vec;
}
int main() {
string str;
set<string> sets;
while (cin>>str)
{
sets.clear(); //集合及時清空
sets = allstring(str); //存儲所有的環串
int n; //n行比較的字符串
cin >> n;
string str2;
int ans = 0;
for (int i = 0; i < n; i++) { //輸入需要比較的字符串
cin >> str2;
if (sets.find(str2) != sets.end()) { //如果集合中能找到的話,說明該字符串是其環串
ans++;
}
else {
continue;
}
}
cout << ans << endl;
}
return 0;
}