[传智杯 #4 决赛] 小智的疑惑
题目描述
传智专修学院给了小智一个仅包含小写字母的字符串
s
s
s,他想知道,里面出现了多少次子串 chuanzhi
呢。
我们称一个字符串
t
t
t 是
s
s
s 的子串,当且仅当将
s
s
s 的开头若干个(可以为 0 个)连续字符和结尾若干个(可以为 0 个)连续字符删去后,剩下的字符串和
t
t
t 相同。例如,我们称 ab
是 abc
的子串,但 ac
不是 abc
的子串。
输入格式
输入只有一行一个字符串,表示字符串 s s s。
输出格式
输出一行一个整数表示答案。
样例 #1
样例输入 #1
welcometochuanzhicupchuanzhi
样例输出 #1
2
提示说明
数据规模与约定
对于全部的测试点,保证 1 ≤ ∣ s ∣ ≤ 4 × 1 0 5 1 \leq |s| \leq 4 \times 10^5 1≤∣s∣≤4×105, ∣ s ∣ |s| ∣s∣ 表示 s s s 的长度,且 s s s 中只有小写字母。
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//队列
// #include <queue>//堆/优先队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
string s,t("chuanzhi");
cin>>s;
ll cnt=0;
for(ll i=0;i<=ll(s.size()-t.size());i++)
{
if(s.substr(i,t.size())==t)
cnt++;
}
cout<<cnt<<endl;
return 0;
}