ZZULIOJ:1157: 连续的n个1

题目描述

计算机数据都是由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;
}

猜你喜欢

转载自blog.csdn.net/couchpotatoshy/article/details/126077384