CCA的字符串
题目链接:nowcoder 213876
到主站看:https://blog.csdn.net/weixin_43346722/article/details/112134361
题目大意
求在一个字符串中,有多少个子串里包含 NowCoder
。
思路
考虑每次找到一个 NowCoder
的子串,会多产生多少种方案。
假设你找到的这个子串的最左边是第 个。
左边界的范围是 (
是上一个
Nowcoder
子串最左边的位置),右边界则是从这个子串的最右边到全部。
然后我们把答案加在一起,就可以了。
代码
#include<cstdio> #include<cstring> #define ll long long using namespace std; int asize, bsize, last; char a[1000001], b[8] = {'N', 'o', 'w', 'C', 'o', 'd', 'e', 'r'}; bool have; ll ans; int main() { scanf("%s", a + 1); asize = strlen(a + 1); for (int i = 8; i <= asize; i++) { have = 1; for (int j = 0; j < 8; j++) if (a[i - j] != b[7 - j]) { have = 0; break; } if (have) { ans += (ll)(i - 7 - last) * (ll)(asize - i + 1); last = i - 7; } } printf("%lld", ans); return 0; }