题目描述
计算机数据都是由0和1组成的,看着长长的0101001110101111011,要找出连续n个1的子串有多少个,确实麻烦,请你编程实现吧。
输入
输入第一行为一个字符串,由0和1组成,长度小于1000;输入第二行为一个正整数n。
输出
输出一个整数,表示连续n个的1的子串的个数。
样例输入 Copy
0101001110101111011 2
样例输出 Copy
6
源代码
//原本是想用双指针算法来进行遍历求解
//后来发现可以用库函数和队列的思维来求解
//本题的解题利用了字符串的find函数
//观察字符串我们可以发现字符串每个元素仅仅有0和1两种状态
//对于n个1组成的目标串我们进行构造
//随后开始对于字符串的遍历,直接查找第一个字串的位置,若找到则答案加一,将此位置的1置换为0,从而进行下一次查找
//找到一组删除头元素,直至数组当中没有字串,输出答案即可
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
string s;
cin >> s;
int n;
cin >> n;
string t;
while(n -- )t = t + '1';
int ans = 0;
for(int i = 0;i < s.size();i ++ )
{
int idx = s.find(t);
if(idx != -1)
{
ans ++ ;
s[idx] = '0';
}
}
cout << ans << endl;
return 0;
}