我在尝试美化
题目
题目描述
传智专修学院给了小智一个仅包含小写字母的字符串 ,他想知道,里面出现了多少次子串 呢。
我们称一个字符串 是 的子串,当且仅当将 的开头若干个(可以为 个)连续字符和结尾若干个(可以为 个)连续字符删去后,剩下的字符串和 相同。例如,我们称 是 的子串,但 不是 的子串。
输入格式
输入只有一行一个字符串,表示字符串 。
输出格式
输出一行一个整数表示答案。
输入输出样例
输入 #1
welcometochuanzhicupchuanzhi
输出 #1
2
题解
这道题的思路非常简单,其实只用把每个长度为的字符串求出来匹配就行了,在c++的类型中,有个库函数,可以取从第一个int开始的连续第二个int的长度的个数。
那么,我们就可以用这个函数,求解出答案
话不多说,上代码(无注释版本,请放心使用)
#include <bits/stdc++.h>
#pragma GCC optimize(1 , 2 , 3 , "Ofast" , "inline")
#define ll long long
using namespace std;
const int N = 5e5 + 5;
string str;
string s[400005];
void solve()
{
cin >> str;
int l = str.size();
s[1] = str.substr(0 , 8);
for (int i = 8 ; i < l ; i++)
{
s[i - 6] = s[i - 7].substr(1 , 7) + str[i];
}
int ans = 0;
for (int i = 1 ; i <= l - 6 ; i++)
{
// cout << s[i] << '\n';
if (s[i] == "chuanzhi")
{
ans++;
}
}
cout << ans;
return ;
}
int main()
{
int T = 1;
// cin >> T;
while (T--)solve();
return 0;
}