当前位置: 首页 > article >正文

python学习——洛谷[NOIP2011 普及组] 统计单词数

[NOIP2011 普及组] 统计单词数

题目描述

一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。

现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例 1),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例 2)。

输入格式

2 2 2 行。

1 1 1 行为一个字符串,其中只含字母,表示给定单词;

2 2 2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。

输出格式

一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从 0 0 0 开始);如果单词在文章中没有出现,则直接输出一个整数 − 1 -1 1

注意:空格占一个字母位

样例 #1

样例输入 #1

To
to be or not to be is a question

样例输出 #1

2 0

样例 #2

样例输入 #2

to
Did the Ottoman Empire lose its power at that time

样例输出 #2

-1

提示

数据范围

$1\leq $ 第一行单词长度 ≤ 10 \leq10 10

$1\leq $ 文章长度 ≤ 1 0 6 \leq10^6 106

noip2011 普及组第 2 题

AC代码

用pythonre模块秒了
有几个注意点:不能统计在单词内的,因此用\b匹配单词边界 , 用re.finditer,不用re.search和count计数,代码如下:

import re
to_find = input().lower()
text = input().lower()
to_match = r'\b'+to_find+r'\b'
match = list(re.finditer(to_match, text))
if match:
    print(len(match), match[0].start())
else:
    print('-1')

以下是代码的逐行解释:

import re  # 导入正则表达式模块,用于字符串的匹配操作

导入 re 模块,这个模块提供了正则表达式的功能。

to_find = input().lower()  # 读取用户输入的单词,并转换为小写

读取用户输入的第一个字符串,这个字符串是要在文章中查找的单词。使用 lower() 方法将这个单词转换为小写,以便进行不区分大小写的匹配。

text = input().lower()  # 读取用户输入的文章,并转换为小写

读取用户输入的第二个字符串,这个字符串是要搜索的文章内容。同样使用 lower() 方法将文章内容转换为小写。

to_match = r'\b'+to_find+r'\b'  # 构建正则表达式,确保匹配完整的单词

构建一个正则表达式,用于匹配完整的单词。\b 是一个单词边界断言,确保匹配的是独立的单词,而不是其他单词的一部分。这里将用户输入的单词插入到两个单词边界断言之间。

match = list(re.finditer(to_match, text))  # 使用 re.finditer() 查找所有匹配项

使用 re.finditer() 函数在文章中查找所有匹配正则表达式的子串。这个函数返回一个迭代器,通过 list() 函数将其转换为列表,以便进行进一步的操作。

if match:  # 如果匹配列表不为空,说明找到了至少一个匹配项
    print(len(match), match[0].start())  # 输出匹配项的数量和第一个匹配项的起始位置

如果 match 列表不为空,说明在文章中找到了至少一个匹配项。len(match) 计算匹配项的数量,match[0].start() 获取第一个匹配项的起始位置,并打印这两个值。

else:
    print('-1')  # 如果没有找到匹配项,输出 -1

如果 match 列表为空,说明在文章中没有找到匹配项,因此打印 -1


http://www.kler.cn/a/445207.html

相关文章:

  • 【开源免费】基于SpringBoot+Vue.JS房屋租赁管理系统(JAVA毕业设计)
  • 苹果手机怎么清理空间:拯救你的拥挤手机
  • 项目搭建+删除(单/批)
  • 【ETCD】【Linearizable Read OR Serializable Read】ETCD 数据读取:强一致性 vs 高性能,选择最适合的读取模式
  • Android Java Ubuntu系统如何编译出 libopencv_java4.so
  • 【Flutter_Web】Flutter编译Web第二篇(webview篇):flutter_inappwebview如何改造方法,变成web之后数据如何交互
  • 大恒相机开发(1)—Python调用采集彩色图像并另存为本地
  • 自动驾驶AVM环视算法--python版本的前后左右单视角投影模式
  • SQL进阶技巧:如何计算算法题分发糖果问题?
  • 简单的bytebuddy学习笔记
  • C#中的匿名方法、Lambda表达式、泛型委托
  • 【传感器技术】期末考试试题总结 ver1,电阻式,电感式,电容式,压电式,霍尔式,温度传感器,光电传感器
  • 【Redis经典面试题一】如何解决Redis和数据库一致性的问题?
  • Linux之文件相关命令
  • UE5 物体自动跟随主角镜头转向
  • 群晖利用acme.sh自动申请证书并且自动重载证书的问题解决
  • 基于LSB最低有效位的音频水印嵌入提取算法FPGA实现,包含testbench和MATLAB对比
  • ADOADO.NET基础
  • OpenGL ES 03 加载3张图片并做混合处理
  • 四相机设计实现全向视觉感知的开源空中机器人无人机
  • 共创共建!葡萄城 SpreadJS 完成 HarmonyOS NEXT 操作系统兼容认证
  • tcp_ack函数
  • 前端模块化
  • 【ETCD】ETCD Leader 节点写入数据流程概览
  • 计算机基础知识复习12.20
  • LCD1602显示模块详解