【洛谷】P1308 [NOIP2011 普及组] 统计单词数

简介: 然后要被查找的b字符串,可能会出现第二个样例中的情况,也就是字符串a是to,而字符串b的Ottoman,这样是不符合题意的。为了 解决这个问题,我们将字符串a首尾都加一个空格,同时将字符串b首尾都加一个空格(这里是为了让字符串b的首单词和尾单词前后均有空格)为了能持续找字符串b中的所有字符串a,我们用一个while循环,如果能找到,就每次从能找到的位置的下一个位置(也就是能找到的位置下标+1)开始找,并及时更新位置,同时计数。因为不区分大小写,所以可以将两个字符串a,b都转为小写(也可以都转为大写)。

1.题目描述

image.png

2. 思路分析

因为不区分大小写,所以可以将两个字符串a,b都转为小写(也可以都转为大写)。

然后要被查找的b字符串,可能会出现第二个样例中的情况,也就是字符串a是to,而字符串b的Ottoman,这样是不符合题意的。为了 解决这个问题,我们将字符串a首尾都加一个空格,同时将字符串b首尾都加一个空格(这里是为了让字符串b的首单词和尾单词前后均有空格)

然后就开始查找,一个字符串b查找另一个字符串a,我们可以使用s.find()函数,如果b.find(a)!=-1,说明能找到字符串a,否则说明找不到。

为了能持续找字符串b中的所有字符串a,我们用一个while循环,如果能找到,就每次从能找到的位置的下一个位置(也就是能找到的位置下标+1)开始找,并及时更新位置,同时计数。

3. 代码实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define int long long
#define endl '\n'

signed main() {
   
   
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    string a, b; 
    getline(cin, a);
    getline(cin, b);
    for (int i = 0; i < a.size(); i++) {
   
   
        if (a[i] >= 'A' && a[i] <= 'Z') a[i] += 32;
    }
    for (int i = 0; i < b.size(); i++) {
   
   
        if (b[i] >= 'A' && b[i] <= 'Z') b[i] += 32;
    }
    a = " " + a + " ";
    b = " " + b + " ";
    if (b.find(a) == -1) cout << -1 << endl;
    else {
   
   
        int st = b.find(a);
        int tmp = st;
        int cnt = 0;
        while (tmp != -1) {
   
   
            cnt++;
            tmp = b.find(a, tmp + 1);
        }
        cout << cnt << " " << st << endl;
    }
    return 0;
}

image.png

相关文章
|
4月前
|
机器学习/深度学习 存储
【洛谷 P1028】[NOIP2001 普及组] 数的计算 题解(递归)
**NOIP2001普及组数的计算**:给定自然数\( n \),构造数列,新数不超过序列最后一项一半。求合法数列个数。输入\( n \)(\(1 \leq n \leq 10^3\))。样例:输入6,输出6。递归解决,代码中定义函数`f`实现递归计算,总和存储在`cnt`中,最后输出。
46 0
|
4月前
|
机器学习/深度学习 人工智能
【洛谷 P1028】[NOIP2001 普及组] 数的计算 题解(递推)
在NOIP2001普及组的数的计算题目中,给定自然数`n`,需构造遵循特定规则的合法数列。合法序列始于`n`,新元素不超过前一项的一半。任务是找出所有这样的数列数量。例如,当`n=6`时,合法序列包括`6`, `6,1`, `6,2`, `6,3`, `6,2,1`, `6,3,1`。程序通过动态规划求解,当`i`为奇数时,`a[i] = a[i - 1]`;为偶数时,`a[i] = a[i - 1] + a[i / 2]`。代码中预处理数组`a`并输出`a[n]`作为答案。输入`n`后,程序直接计算并打印合法数列个数。
48 0
|
4月前
【洛谷 P1035】[NOIP2002 普及组] 级数求和 题解(循环)
**NOIP2002普及组题目:求级数$S_n=1+\frac{1}{2}+\frac{1}{3}+...+\frac{1}{n}$超过$k$的最小$n$。给定$1\leq k\leq 15$,输出满足$S_n&gt;k$的$n$。输入$1$个整数$k$,输出相应$n$。例如,输入$1$,输出$2$。代码中使用double确保精度,通过累加求和判断条件找到$n$。**
33 0
P1308 [NOIP2011 普及组] 统计单词数(模拟加函数+数学分析)
P1308 [NOIP2011 普及组] 统计单词数(模拟加函数+数学分析)
73 0
P1093 [NOIP2007 普及组] 奖学金(模拟排序)
P1093 [NOIP2007 普及组] 奖学金(模拟排序)
51 0
|
人工智能 索引
洛谷P1005 [NOIP2007 提高组] 矩阵取数游戏
洛谷P1005 [NOIP2007 提高组] 矩阵取数游戏
【2012NOIP普及组】T1. 质因数分解 试题解析
【2012NOIP普及组】T1. 质因数分解 试题解析
|
机器学习/深度学习 iOS开发 Windows
P2671 [NOIP2015 普及组] 求和(前缀和)
P2671 [NOIP2015 普及组] 求和(前缀和)
142 0
|
C语言
浙大版《C语言程序设计(第3版)》题目集习题5-5 使用函数统计指定数字的个数 (15 分)
题要求实现一个统计整数中指定数字的个数的简单函数。 函数接口定义: int CountDigit( int number, int digit ); 其中number是不超过长整型的整数,digit为[0, 9]区间内的整数。函数CountDigit应返回number中digit出现的次数。
728 0
浙大版《C语言程序设计(第3版)》题目集习题5-5 使用函数统计指定数字的个数 (15 分)
|
机器学习/深度学习
洛谷【4】P1035 [NOIP2002 普及组] 级数求和
洛谷【4】P1035 [NOIP2002 普及组] 级数求和
洛谷【4】P1035 [NOIP2002 普及组] 级数求和