题目链接:点击查看

题目大意:给出一个字符串a和字符串b,现在问字符串b中有多少个单词与字符串a相等,并记录第一次出现的位置

题目分析:看似很简单的一个模拟题,其实包含了不少需要注意的地方:

  1. string类的整行输入-getline函数
  2. 如何处理大小写不同的字符串-tolower函数
  3. 如何快速匹配-find函数(或KMP)
  4. 如何匹配整个单词-对字符串a和字符串b前后增加空格

涉及到的这些细节真的挺别扭的,一开始我勉强实现后,有一个测试点T掉了,后来发现原来是我一直用的find函数的姿势不太对,以前都是这样写的:

while(b.find(a)!=string::npos)
{b.erase(b.find(a),a.size());cnt++;
}

但这样写无疑会增加erase函数调用的时间开销,所以我们换成了这样写:

int pos=b.find(a);
while(pos!=string::npos)
{pos=b.find(a,pos+1);cnt++;
}

看似只是少了一个erase函数,但实际上效率高了不止一点半点,因为调用一次erase函数的最坏时间开销是O(n),调用多了时间开销也就上去了,导致之前1.2s都没跑出来的程序,仅仅改动了这一个地方就立马40多ms跑过去了,然后开个cin加速外挂,再吸个氧,就10ms无压力过了

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=210;int main()
{
//  freopen("input.txt","r",stdin);ios::sync_with_stdio(false);string a,b;getline(cin,a);getline(cin,b);for(int i=0;i<a.size();i++)a[i]=tolower(a[i]);for(int i=0;i<b.size();i++)b[i]=tolower(b[i]);b=" "+b+" ";a=" "+a+" ";int pos=-1,cnt=0;int k=b.find(a);while(k!=string::npos){if(pos==-1)pos=k;k=b.find(a,k+1);cnt++;}if(cnt)cout<<cnt<<' '<<pos<<endl;elsecout<<-1<<endl;return 0;
}

洛谷 - P1308 统计单词数(字符串+模拟)相关推荐

  1. Java 洛谷 P1308 统计单词数

    题目链接:https://www.luogu.com.cn/problem/P1308 代码实例: import java.util.Scanner; public class Main{public ...

  2. 洛谷 P1598 垂直柱状图【字符串+模拟】

    P1598 垂直柱状图 题目描述 写一个程序从输入文件中去读取四行大写字母(全都是大写的,每行不超过72个字符),然后用柱状图输出每个字符在输入文件中出现的次数.严格地按照输出样例来安排你的输出格式. ...

  3. [ZCMU OJ]1750: 统计单词数(字符串处理/find运用)

    Description 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你 ...

  4. c语言--洛谷p1308统计单词数

    //这道题思路是借鉴别人的 #include<stdio.h> #include<string.h> int main(){char a[11];char b[1000000] ...

  5. 洛谷 P1055 ISBN号码【字符串+模拟】

    P1055 ISBN号码 题目描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符,其规定格式如"x-xxx-xxxxx-x",其 ...

  6. 洛谷 P1308/暂无题解

    P1308 统计单词数 题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定 ...

  7. 信息学奥赛一本通 1400:统计单词数 | 1954:【11NOIP普及组】统计单词数 | OpenJudge NOI 1.12 05 | 洛谷 P1308 [NOIP2011 普及组] 统计单词数

    [题目链接] ybt 1400:统计单词数 ybt 1954:[11NOIP普及组]统计单词数 OpenJudge NOI 1.12 05:统计单词数 洛谷 P1308 [NOIP2011 普及组] ...

  8. JSK-27321 统计单词数【字符串】

    统计单词数 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在 ...

  9. 【洛谷新手村解题报告三 字符串/递归前】C++语言,一题多解,思路和WA反思

    [洛谷新手村解题报告三] 简单字符串 过程函数与递归 首先下一部分!字符串,这个前面两题新手跳过吧 简单字符串 第三题 统计单词数 [2/2] 给定一个单词,请你输出它在给定的文章中出现的次数和第一次 ...

最新文章

  1. memsql 落地mysql_MemSQL初体验 - (2)初始化测试环境
  2. 使用DelayExchange
  3. 第五章 MyEclipse配置hadoop开发环境
  4. 【转载】Apache Ranger剖析:Hadoop生态圈的安全管家
  5. python pillow环境_解决Python图片处理模块pillow使用中出现的问题
  6. C - 师--链表的结点插入
  7. 惠普招聘 运维质量管理顾问 1名 北京
  8. 策划反推文档教程:格式篇
  9. 累加寄存器(AC)入门
  10. LayaAir graphics 矢量绘图之 多边形、矩形
  11. java agentlib 作用_javaagent 简介
  12. 深度学习与围棋,零开始一步步实现自己的“AlphaGo”
  13. 去年直播android和ios打赏,iOS直播类APP上架历程
  14. inflate方法的用法
  15. 幸福的小故事,愿岁月安好
  16. 迅雷推阅读产品 市场容不下生力军
  17. 重写equals方法一定要重写hashcode方法吗
  18. 百度地图API 2014年 v3.0.0版本缩放控件、比例尺控件、指南针控件【控制方法】
  19. ubuntu openpn 客户端连接
  20. 使用Github和Hexo搭建个人主页时报错 404 There isnt a GitHub Pages site here

热门文章

  1. 使用Docker-数据卷命令
  2. Nginx负载均衡策略之轮询与加权轮询
  3. MyBatis 实际使用案例-一级标签
  4. 体验Lambda表达式【理解】
  5. 进化之路:故事从两个线程说起
  6. plsql(轻量版)_游标的使用2
  7. Oracle数据库的安装和配置
  8. 迭代器模式coding
  9. DSA签名算法 - Java加密与安全
  10. JVM-Java内存区域