news 2026/2/10 19:41:01

(100分)- 单词倒序(Java JS Python)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
(100分)- 单词倒序(Java JS Python)

(100分)- 单词倒序(Java & JS & Python)

题目描述

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

输入描述

输入字符串S,S的长度 1 ≤ N ≤ 100

输出描述

输出倒序后的字符串

备注

标点符号左右的空格 ≥ 0,单词间空格>0

用例
输入yM eman si boB.
输出My name is Bob.
说明
输入woh era uoy ? I ma enif.
输出how are you ? I am fine.
说明
题目解析

从用例可以看出,单词的倒序并不难,将字符串单词转为字符数组后,reverse一下就行了。但是单词中如果有标点符号的话,则标点符号的位置不能改变,比如enif. 倒序后为 fine. 其中 . 的位置在倒序前后是一样的。

我的解题思路如下,从左到右遍历每一个字符,如果字符是 , . ? 或者空格,则看成一个分界符,将分界符之间的单词片段进行倒序。

JavaScript算法源码
/* JavaScript Node ACM模式 控制台输入获取 */ const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); rl.on("line", (line) => { console.log(getResult(line)); }); function getResult(str) { const reg = /[\,\.\?\s]/; const idxs = [-1]; for (let i = 0; i < str.length; i++) { if (reg.test(str[i])) { idxs.push(i); } } idxs.push(str.length); const arr = [...str]; idxs.reduce((p, c) => { let l = p + 1; let r = c - 1; while (l < r) { let tmp = arr[l]; arr[l] = arr[r]; arr[r] = tmp; l++; r--; } return c; }); return arr.join(""); }

更精简的解法,可以利用String.prototype.repalce的正则匹配出输入字符串中各个英文子串,将这些英文子串替换为倒序子串

/* JavaScript Node ACM模式 控制台输入获取 */ const readline = require("readline"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout, }); rl.on("line", (line) => { console.log(getResult(line)); }); function getResult(str) { return str.replace(/[a-zA-Z]+/g, (s) => [...s].reverse().join("")); }
Java算法源码
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); System.out.println(getResult(str)); } public static String getResult(String str) { ArrayList<Integer> idxs = new ArrayList<>(); idxs.add(-1); for (int i = 0; i < str.length(); i++) { if (",.? ".indexOf(str.charAt(i)) != -1) { idxs.add(i); } } idxs.add(str.length()); char[] chars = str.toCharArray(); for (int i = 0; i < idxs.size() - 1; i++) { int l = idxs.get(i) + 1; int r = idxs.get(i + 1) - 1; while (l < r) { char tmp = chars[l]; chars[l] = chars[r]; chars[r] = tmp; l++; r--; } } StringBuilder sb = new StringBuilder(); for (char c : chars) { sb.append(c); } return sb.toString(); } }
Python算法源码
import re s = input() p = re.compile(r"[\\,\\.\\?\s]") idxs = [-1] for i in range(len(s)): if p.match(s[i]): idxs.append(i) idxs.append(len(s)) arr = [c for c in s] for i in range(len(idxs) - 1): l = idxs[i] + 1 r = idxs[i + 1] - 1 while l < r: arr[l], arr[r] = arr[r], arr[l] l += 1 r -= 1 print("".join(arr))

更精简的,可以利用re.sub(pattern, repl, string, count=0, flags=0)

其中repl可以是一个函数,该函数接收被pattern正则匹配结果re.Match类型的值作为入参matched,我们可以通过matched.group()获取出匹配的子串,并对它做反转处理,然后返回给re.sub进行替换

import re s = input() def rep(matched): tmp = list(matched.group()) tmp.reverse() return "".join(tmp) print(re.sub(r"[a-zA-Z]+", rep, s))
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/8 20:41:28

(100分)- 幻方修复(Java JS Python)

(100分)- 幻方修复&#xff08;Java & JS & Python&#xff09; 题目描述 幻方&#xff08;Magic Square&#xff09;是一个由1~N&#xff0c;共N个整数构成的N*N矩阵&#xff0c;满足每行、列和对角线上的数字和相等。 上回你已经帮助小明将写错一个数字的幻方进行…

作者头像 李华
网站建设 2026/2/8 20:39:08

STC15F204EA概述

特性:增强型 8051 CPU&#xff0c;1T&#xff0c;单时钟/机器周期&#xff0c;速度比普通8051快6-12倍工作电压&#xff1a;STC15F204EA 系列工作电压&#xff1a;5.5V - 3.8V&#xff08;5V 单片机&#xff09;STC15L204EA 系列工作电压&#xff1a;3.6V - 2.4V&#xff08;3V…

作者头像 李华
网站建设 2026/2/8 20:35:40

计算机小程序毕设实战-基于springboot+小程序的高校生活互助平台小程序基于SpringBoot的高校报修与互助平台小程序【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/2/10 15:12:45

数据产品视频领域:内容理解与智能推荐算法

数据产品视频领域:内容理解与智能推荐算法 关键词:视频内容理解、智能推荐算法、深度学习、计算机视觉、自然语言处理、多模态学习、个性化推荐 摘要:本文深入探讨数据产品视频领域中的内容理解与智能推荐算法。我们将从视频内容理解的技术原理出发,分析如何通过深度学习技…

作者头像 李华
网站建设 2026/2/8 20:10:07

基于Spring Boot的水产品安全信息管理系统

&#x1f345; 作者主页&#xff1a;Selina .a &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作。 主要内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据…

作者头像 李华
网站建设 2026/2/8 19:27:41

CANN分布式训练:从单机到千卡集群的弹性扩展实战

CANN组织链接&#xff1a;https://atomgit.com/cann ops-nn仓库链接&#xff1a;https://atomgit.com/cann/ops-nn 当千亿参数大模型训练因通信瓶颈扩展效率仅38%&#xff0c;当工程师耗费数月调试分布式脚本却频繁遭遇节点故障&#xff0c;当“千卡训练”沦为少数巨头的专属游…

作者头像 李华