1 solutions
-
0
题解:哈基米有南北绿豆永动机
这是一道基础的字符串模式匹配题目。题目要求判断给定的长字符串 中是否包含连续的、顺序一致的子串
hachimi。
1. 核心思路
题目中对“子字符串”的定义非常明确:
的每一个字符在 中出现并必须在原始字符串中位置相邻且顺序一致。
这在计算机科学中就是标准的子串(Substring)查找。由于本题目标字符串
hachimi是固定的且长度较短(仅 7 个字符),而原字符串长度 ,我们有多种方式实现:- 内置函数(推荐): 大多数高级语言(如 C++ 的
string::find,Python 的in关键字)都内置了高效的字符串查找算法。 - 滑动窗口/遍历: 遍历原字符串,检查以每个位置开始的长度为 7 的子串是否等于
hachimi。
2. 代码实现
C++ 实现
在 C++ 中,可以使用
std::string的find成员函数。如果找到子串,它会返回子串出现的起始位置;如果没找到,则返回string::npos。#include <iostream> #include <string> using namespace std; int main() { string s; if (!(cin >> s)) return 0; // 使用 string 的 find 函数查找子串 if (s.find("hachimi") != string::npos) { cout << "Yes" << endl; } else { cout << "No" << endl; } return 0; }Python 实现
Python 的实现最为简洁,直接使用
in运算符即可。s = input().strip() if "hachimi" in s: print("Yes") else: print("No")
3. 复杂度分析
-
时间复杂度: 或更优。
-
在最坏情况下(朴素匹配),时间复杂度为 ,其中 是原串长度, 是目标串长度(这里 )。
-
对于 的数据量,这个复杂度绰绰有余(约 次运算)。
-
空间复杂度: 。需要空间存储输入的字符串。
4. 常见坑点提醒
- 子串 vs 子序列: 题目强调了“位置相邻”,所以是子串。如果是“子序列”,则不需要字符相邻。
- 输入长度: 字符串长度可达 ,确保使用的数组或容器能够容纳,并使用高效的输入方式(如 C++ 中的
cin或scanf)。 - 大小写: 题目虽然说输出不区分大小写,但输入的字符串是由“小写字母组成”的,因此匹配时直接匹配小写的
hachimi即可。
- 内置函数(推荐): 大多数高级语言(如 C++ 的
- 1
Information
- ID
- 26
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 10
- Tags
- # Submissions
- 5
- Accepted
- 4
- Uploaded By