B3663 [语言月赛202209] Luogu Academic 題解

· · 题解

B3663 [语言月赛202209] Luogu Academic 題解

Source & Knowledge

2022 年 9 月语言月赛,由洛谷网校入门计划/基础计划提供。

本题考察对字符串(std::string)的掌握与运用。

文字题解

题目大意

给定一个字符串求 luogu 字串出现了多少次。

解析

我们把这道题拆成 3 个步骤:读入字符串,寻找字串,输出答案。

读入字符串

对于字符串 std::string s,我们可以使用 std::cingetline(std::cin,s) 来读入,前者读道空格停止,后者将整行全部读入,再本题无差别。

寻找字串

本题字符串的大小最长为 10^6,可以直接从头开始遍历。

通过 s.size()s.length 得到字符串长度,从第 0 位开始遍历到 \textit{size} -4 位。比较第 i 位是否是 l,第 i+1 是否是 u\cdots,第 i+4 位是不是 u,如果是,把答案加上 1

为什么只要遍历到 \textit{size}-4​ 位呢,可以看如下字符串

0 1 2 3 4 5 6 7 8 9
s_i l l o v e l u o g u

要比较字串,就要查到第 i 位到第 i+4 位是否相同,当 i=\textit{size}-4 时,则要查到第 \textit{size} 位,所以只需要遍历到 \textit{size}-4 位就可以了。

输出答案

使用 std::coutprintf 输出答案即可。

至此,整道题目就完成了。

注意事项

视频题解

完整代码见视频题解