【2025刷题笔记】- 单词倒序

刷题笔记合集🔗

单词倒序

问题描述

输入单行英文句子,里面包含英文字母、空格以及 三种标点符号,请将句子内每个单词进行倒序,并输出倒序后的语句。

输入格式

输入字符串 的长度满足

输出格式

输出倒序后的字符串。

样例输入

yM eman si boB. 
woh era uoy ? I ma enif.

样例输出

My name is Bob.
how are you ? I am fine.

数据范围

样例 解释说明
样例1 将"yM"倒序为"My","eman"倒序为"name","si"倒序为"is","boB"倒序为"Bob",注意标点符号"."位置不变。
样例2 将每个单词进行倒序,标点符号"?"和"."位置不变。
  • 标点符号左右的空格 ,单词间空格
  • 输入字符串长度满足

题解

这道题要求将句子中的每个单词倒序输出,同时保持标点符号和空格的位置不变。

解决这个问题的关键是识别出句子中的每个单词,然后对每个单词单独进行倒序处理。有两种主要的解决方案:

方法一:逐字符处理

  1. 定义分隔符集合(空格和三种标点符号)
  2. 遍历字符串,记录所有分隔符的位置(包括开头和结尾)
  3. 对于相邻两个分隔符之间的字符序列(即单词),进行倒序处理
  4. 拼接处理后的结果

这种方法的优点是直观明了,能够精确控制每个字符的处理。

方法二:正则表达式替换

对于支持正则表达式的语言,可以直接使用正则表达式匹配所有单词,然后将每个匹配到的单词进行倒序替换:

  1. 使用正则表达式匹配连续的英文字母(即单词)
  2. 对每个匹配到的单词进行倒序
  3. 用倒序后的单词替换原单词

这种方法代码简洁,但需要理解正则表达式。

时间复杂度:O(n),其中n是字符串的长度,我们只需要遍历一次字符串。 空间复杂度:O(n),需要存储处理后的结果。

对于这道题来说,两种方法都能高效地解决问题。考虑到输入字符串的长度限制在100以内,任何合理的实现都能快速得到结果。

参考代码

  • Python
import sys
import re
input = lambda:sys.stdin.readline().strip()

# 读取输入
s = input()

# 方法一:使用正则表达式替换
def reverse_words_regex(s):
    # 定义一个函数来处理每个匹配的单词
    def reverse_word(match):
        # 获取匹配的单词并倒序
        word = match.group(0)
        return word[::-1]
    
    # 使用正则表达式匹配单词并替换
    # [a-zA-Z]+ 匹配一个或多个英文字母
    return re.sub(r'[a-zA-Z]+', reverse_word, s)

# 方法二:逐字符处理
def reverse_words_manual(s):
    # 定义分隔符
    delimiters = {' ', ',', '.', '?'}
    
    # 记录分隔符位置
    positions = [-1]  # 开始位置
    for i in range(len(s)):
        if s[i] in delimiters:
            positions.append(i)
    positions.append(len(s))  # 结束位置
    
    # 处理每个单词
    result = list(s)  # 转换为字符列表以便修改
    for i in range(len(positions) - 1):
        start = positions[i] + 1
        end = positions[i + 1] - 1
        
        # 如果start>end,说明是连续的分隔符
        if start <= end:
            # 反转单词
            word = result[start:end+1]
            word.reverse()
            result[start:end+1] = word
    
    return ''.join(result)

# 使用正则表达式方法处理并输出结果
print(reverse_words_regex(s))
  • Cpp
#include <bits/stdc++.h>
using namespace std;

// 判断字符是否为分隔符
bool is_delimiter(char c) {
    return c == ' ' || c == ',' ||

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

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

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

全部评论

相关推荐

Java转测开第一人:这种就是饼 把应届当廉价劳动力用完然后丢掉
你觉得今年秋招难吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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