【2025刷题笔记】- 单词加密

刷题笔记合集🔗

单词加密

问题描述

1、输入一个英文句子,句子中包含若干个单词,每个单词间有一个空格。

2、需要将句子中的每个单词按照要求加密输出。

要求:

1)单词中包括元音字符('aeuio'、'AEUIO',大小写都算),则将元音字符替换成'*'。

2)单词中不包括元音字符,将单词首尾字符进行对换。

输入格式

输入只有一行,包含一个长度都不超过 的字符串,表示英文句子。

输出格式

输出只有一行,即按要求输出加密处理后的英文句子。

样例输入

Hello world

样例输出

H*ll* w*rld

数据范围

样例 解释说明
样例1 "Hello world"中,"Hello"含有元音字符'e'和'o',替换为"Hll";"world"含有元音字符'o',替换为"w*rld"。
  • 句子长度不超过 个字符
  • 单词之间以空格分隔
  • 所有单词由英文字母组成

题解

这道题目要求我们对输入的英文句子中的每个单词进行特定规则的加密处理。

首先,我们需要把句子按空格分割成多个单词,然后对每个单词分别处理:

  1. 如果单词中包含元音字母(a、e、i、o、u的大小写形式),则将所有元音字母替换为星号'*'
  2. 如果单词中不包含任何元音字母,则将单词的首尾字符互换位置

这道题目的核心是字符串处理,主要考察基本的字符串操作技巧。在实现上,我们可以:

  1. 使用split函数将句子分割成单词数组
  2. 对于每个单词,先检查是否包含元音字母
  3. 根据检查结果应用相应的规则处理单词
  4. 最后将处理后的单词数组重新用空格连接成新句子

时间复杂度分析:假设句子总长度为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%内容,订阅专栏后可继续查看/也可单篇购买

算法刷题笔记 文章被收录于专栏

本专栏收集并整理了一些刷题笔记

全部评论

相关推荐

上周组里招人,我面了六个候选人,回来跟同事吃饭的时候聊起一个让我挺感慨的现象。前三个候选人,算法题写得都不错。第一道二分查找,五分钟之内给出解法,边界条件也处理得干净。第二道动态规划,状态转移方程写对了,空间复杂度也优化了一版。我翻他们的简历,力扣刷题量都在300以上。后三个呢,就有点参差不齐了。有的边界条件没处理好,有的直接说这道题没刷过能不能换个思路讲讲。其中有一个女生,我印象特别深——她拿到题之后没有马上写,而是先问我:“面试官,我能先跟你确认一下我对题目的理解吗?”然后她把自己的思路讲了一遍,虽然最后代码写得不是最优解,但整个沟通过程非常顺畅。这个女生的代码不是最优的,但当我问她“如果这里是线上环境,你会怎么设计’的时候,她给我讲了一套完整的方案——异常怎么处理、日志怎么打、怎么平滑发布。她对这是之前在实习的时候踩过的坑。”我在想LeetCode到底在筛选什么?我自己的经历可能有点代表性。我当年校招的时候,也是刷了三百多道题才敢去面试。那时候大家都刷,你不刷就过不了笔试关。后来工作了,前三年基本没再打开过力扣。真正干活的时候,没人让你写反转链表,也没人让你手撕红黑树。更多的是:这个接口为什么慢了、那个服务为什么OOM了、线上数据对不上了得排查一下。所以后来我当面试官,慢慢调整了自己的评判标准。算法题我还会出,但目的变了。我出算法题,不是想看你能不能背出最优解。而是想看你拿到一个陌生问题的时候,是怎么思考的。你会先理清题意吗?你会主动问边界条件吗?你想不出来的时候会怎么办?你写出来的代码,变量命名乱不乱、结构清不清楚?这些才是工作中真正用得到的能力。LeetCode是一个工具,不是目的。它帮你熟悉数据结构和常见算法思路,这没问题。但如果你刷了三百道题,却说不清楚自己的项目解决了什么问题、遇到了什么困难、你是怎么解决的,那这三百道题可能真的白刷了。所以还要不要刷LeetCode?要刷,但别只刷题。刷题的时候,多问自己几个为什么:为什么用这个数据结构?为什么这个解法比那个好?如果换个条件,解法还成立吗?把刷题当成锻炼思维的方式,而不是背答案的任务。毕竟面试官想看到的,从来不是一台背题机器,而是一个能解决问题的人。
牛客51274894...:意思是光刷力扣还不够卷
AI时代还有必要刷lee...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务