【2025刷题笔记】- 单词加密
刷题笔记合集🔗
单词加密
问题描述
1、输入一个英文句子,句子中包含若干个单词,每个单词间有一个空格。
2、需要将句子中的每个单词按照要求加密输出。
要求:
1)单词中包括元音字符('aeuio'、'AEUIO',大小写都算),则将元音字符替换成'*'。
2)单词中不包括元音字符,将单词首尾字符进行对换。
输入格式
输入只有一行,包含一个长度都不超过 的字符串,表示英文句子。
输出格式
输出只有一行,即按要求输出加密处理后的英文句子。
样例输入
Hello world
样例输出
H*ll* w*rld
数据范围
| 样例 | 解释说明 |
|---|---|
| 样例1 | "Hello world"中,"Hello"含有元音字符'e'和'o',替换为"Hll";"world"含有元音字符'o',替换为"w*rld"。 |
- 句子长度不超过
个字符
- 单词之间以空格分隔
- 所有单词由英文字母组成
题解
这道题目要求我们对输入的英文句子中的每个单词进行特定规则的加密处理。
首先,我们需要把句子按空格分割成多个单词,然后对每个单词分别处理:
- 如果单词中包含元音字母(a、e、i、o、u的大小写形式),则将所有元音字母替换为星号'*'
- 如果单词中不包含任何元音字母,则将单词的首尾字符互换位置
这道题目的核心是字符串处理,主要考察基本的字符串操作技巧。在实现上,我们可以:
- 使用split函数将句子分割成单词数组
- 对于每个单词,先检查是否包含元音字母
- 根据检查结果应用相应的规则处理单词
- 最后将处理后的单词数组重新用空格连接成新句子
时间复杂度分析:假设句子总长度为n,我们需要遍历每个字符一次,所以时间复杂度为O(n)。在这道题的数据范围内(n≤100),这个复杂度是完全可以接受的。
空间复杂度:我们需要存储原始单词和处理后的单词,因此空间复杂度也是O(n)。
这个问题的解法直接明了,没有需要特别优化的地方,按照题目要求实现即可。
参考代码
- Python
import sys
import re
# 定义输入函数
input = lambda: sys.stdin.readline().strip()
# 读取输入的句子
sentence = input()
# 解析句子中的单词
def process_words(s):
# 按空格分割句子成单词列表
words = s.split()
result = []
# 处理每个单词
for word in words:
# 检查是否包含元音字母
if re.search('[aeiouAEIOU]', word):
# 替换元音字母为*
new_word = re.sub('[aeiouAEIOU]', '*', word)
else:
# 将首尾字符互换
chars = list(word)
if len(chars) > 1: # 确保单词长度大于1
chars[0], chars[-1] = chars[-1], chars[0]
new_word = ''.join(chars)
result.append(new_word)
# 返回处理后的句子
return ' '.join(result)
# 输出结果
print(process_words(sentence))
- Cpp
#include <bits/stdc++.h>
using namespace std;
// 检查字符是否为元音
bool is_vowel(char c) {
// 将字符转换为小写
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
算法刷题笔记 文章被收录于专栏
本专栏收集并整理了一些刷题笔记
查看17道真题和解析
