当前位置: 首页 > news >正文

2026-04-25:反转元音数相同的单词。用go语言,给定一个由小写英文单词组成的字符串,各单词之间用单空格分隔。 先统计第一个单词里出现的元音字母数量(元音为 a/e/i/o/u)。记这个数量为

2026-04-25:反转元音数相同的单词。用go语言,给定一个由小写英文单词组成的字符串,各单词之间用单空格分隔。

先统计第一个单词里出现的元音字母数量(元音为 a/e/i/o/u)。记这个数量为 k。

然后从第二个单词开始逐个处理:如果某个单词的元音数量也等于 k,就把该单词反转字母顺序;否则保持该单词不变。

最后把所有单词按原有顺序重新用空格拼接,输出结果字符串。

1 <= s.length <= 100000。

s 仅由小写的英文字母和空格组成。

s 中的单词由 单个空格 隔开。

s 不包含前导或尾随空格。

输入: s = “cat and mice”。

输出: “cat dna mice”。

解释:

第一个单词 “cat” 包含 1 个元音字母。

“and” 包含 1 个元音字母,因此将其反转为 “dna”。

“mice” 包含 2 个元音字母,因此保持不变。

最终结果字符串为 “cat dna mice”。

题目来自力扣3775。

代码执行过程详细分步描述

第一步:定义元音统计函数(countVowel)

这是一个辅助函数,作用是统计一个字符串中元音字母(a/e/i/o/u)的总个数

  1. 遍历字符串里的每一个字符;
  2. 逐个判断字符是否是元音字母;
  3. 每找到一个元音字母,计数加1;
  4. 遍历完成后,返回最终的元音计数结果。

第二步:执行核心逻辑函数(reverseWords)

子步骤1:拆分字符串为单词数组

代码将输入的完整字符串按单个空格切割,把连续的字符串拆分成独立的单词列表:

  • 输入:"cat and mice"
  • 切割后得到单词数组:["cat", "and", "mice"]

子步骤2:统计第一个单词的元音数(确定k值)

  1. 取出单词数组的第一个单词:cat
  2. 调用元音统计函数计算元音数:
    • 字符c:非元音;
    • 字符a:元音,计数+1;
    • 字符t:非元音;
  3. 最终第一个单词元音数k = 1,并把这个值固定下来。

子步骤3:遍历处理第二个及之后的所有单词

从第二个单词开始(数组下标为1),逐个判断、处理:

  1. 处理第二个单词:and

    • 调用函数统计元音数:a是元音,n/d非元音,元音数=1;
    • 判断:元音数(1)等于k(1),满足反转条件;
    • 执行反转操作:将单词and的字母顺序颠倒,变成dna
    • 用反转后的单词替换原单词,数组变为:["cat", "dna", "mice"]
  2. 处理第三个单词:mice

    • 调用函数统计元音数:ie是元音,元音数=2;
    • 判断:元音数(2)不等于k(1),不满足反转条件;
    • 保持原单词不变,数组仍为:["cat", "dna", "mice"]

子步骤4:拼接单词数组为完整字符串

将处理后的单词数组,按单个空格重新拼接成一个完整字符串:

  • 拼接结果:cat dna mice

第三步:主函数输出结果

  1. 定义输入字符串s = "cat and mice"
  2. 调用核心处理函数得到结果;
  3. 打印输出最终结果:cat dna mice

时间复杂度与额外空间复杂度分析

1. 总时间复杂度

时间复杂度描述代码执行的总操作次数与输入数据规模的关系

  1. 字符串拆分、拼接:操作次数与字符串总长度n成正比,复杂度为O(n)
  2. 元音统计:遍历整个字符串的所有字符一次,复杂度为O(n)
  3. 单词反转:仅反转符合条件的单词,总操作次数不超过字符串总长度n,复杂度为O(n)

所有步骤都是线性操作,总时间复杂度为 O(n)(n 为输入字符串的总长度)。

2. 总额外空间复杂度

额外空间复杂度描述代码执行过程中,除了输入和输出外,额外占用的内存空间

  1. 代码需要创建单词数组存储所有单词,空间大小与字符串长度n成正比;
  2. 反转单词时需要创建临时字节切片,空间大小不超过单词总长度;
  3. 所有临时变量的空间占用均为线性级别;

总额外空间复杂度为 O(n)(n 为输入字符串的总长度)。


总结

  1. 执行流程:拆分字符串→统计首单词元音数→遍历判断并反转符合条件的单词→拼接字符串→输出结果;
  2. 时间复杂度:O(n),处理效率高,可满足题目中最长10万字符的输入要求;
  3. 额外空间复杂度:O(n),需要线性空间存储单词和临时数据。

Go完整代码如下:

packagemainimport("fmt""slices""strings")funccountVowel(sstring)(vowelint){for_,c:=ranges{ifstrings.IndexRune("aeiou",c)>=0{vowel++}}return}funcreverseWords(sstring)string{a:=strings.Split(s," ")cnt0:=countVowel(a[0])fori:=1;i<len(a);i++{ifcountVowel(a[i])==cnt0{t:=[]byte(a[i])slices.Reverse(t)a[i]=string(t)}}returnstrings.Join(a," ")}funcmain(){s:="cat and mice"result:=reverseWords(s)fmt.Println(result)}

Python完整代码如下:

# -*-coding:utf-8-*-defcount_vowel(s:str)->int:"""Count vowels in a string"""vowel=0forcins:ifcin"aeiou":vowel+=1returnvoweldefreverse_words(s:str)->str:"""Reverse words that have the same vowel count as the first word"""words=s.split(" ")cnt0=count_vowel(words[0])foriinrange(1,len(words)):ifcount_vowel(words[i])==cnt0:# Reverse the wordwords[i]=words[i][::-1]return" ".join(words)defmain():s="cat and mice"result=reverse_words(s)print(result)if__name__=="__main__":main()

C++完整代码如下:

#include<iostream>#include<string>#include<vector>#include<algorithm>#include<sstream>intcountVowel(conststd::string&s){intvowel=0;std::string vowels="aeiou";for(charc:s){if(vowels.find(c)!=std::string::npos){vowel++;}}returnvowel;}std::stringreverseWords(conststd::string&s){// Split string into wordsstd::vector<std::string>words;std::stringstreamss(s);std::string word;while(ss>>word){words.push_back(word);}if(words.empty()){return"";}intcnt0=countVowel(words[0]);for(size_t i=1;i<words.size();i++){if(countVowel(words[i])==cnt0){// Reverse the wordstd::reverse(words[i].begin(),words[i].end());}}// Join the words backstd::string result;for(size_t i=0;i<words.size();i++){if(i>0){result+=" ";}result+=words[i];}returnresult;}intmain(){std::string s="cat and mice";std::string result=reverseWords(s);std::cout<<result<<std::endl;return0;}

http://www.jsqmd.com/news/695712/

相关文章:

  • 抖音批量下载终极指南:3分钟搞定无水印视频免费下载
  • 异构计算SDK:统一编程接口,解决跨平台高性能计算碎片化难题
  • 图书借阅信用链程序,借阅归还记录上链,逾期标记信用分,降低图书馆管理成本。
  • 收藏!2026字节大模型应用工程师刷屏,应届生85万起,小白/程序员必看学习指南
  • 2026年Q2食品车间设计施工洁净度技术全解析:山东PCR实验室设计施工/山东万级净化车间设计施工/山东中央厨房设计施工/选择指南 - 优质品牌商家
  • 企业微信命令行工具wecom-cli:Rust+Node.js混合架构与Skill机制详解
  • 智能搜索代理框架II-Researcher:从RAG到代理增强研究的深度部署指南
  • 连锁餐饮出海,网络是第一道坎 —— 百亿级日式餐饮连锁如何用 SD-WAN 打通全球门店 “任督二脉“
  • 从零设计一个简易USB摄像头:基于STM32和UVC协议栈的实战指南(含描述符配置详解)
  • Windows DPI缩放深度解析:SetDPI命令行工具的完整技术指南
  • 如何在5分钟内用免费在线工具PPTist创建专业演示文稿
  • Camera Sensor核心参数解析:从像素时钟到MIPI速率的链路计算
  • 开源情绪感知虚拟岛屿:脑机接口与生理信号交互实践
  • 如果让你基于 OpenClaw 的设计理念从零搭建一个 Agent 框架,你会先做哪三个模块?为什么?
  • 为什么92%的券商前端项目仍在用不安全的VSCode默认设置?——2024金融DevSecOps白皮书首发预警
  • 从AutoGen到MAF:多智能体系统架构演进与实战指南
  • 多智能体系统(MAS)开源框架实战:从核心原理到应用搭建
  • Agent 是怎么规划和拆任务的?把它的大脑拆开给你看
  • web权限提升与转移学习笔记
  • LSTM时序预测实战:从原理到部署全解析
  • Linux CH341SER驱动终极指南:5个步骤解决USB转串口连接问题
  • 必看!北京别墅改造公司专业深度测评,排名前五之首竟是它!
  • 保姆级教程:用LIBERO和Python一步步调试机器人视觉,从相机画面到关节控制
  • 别再傻傻分不清了!一文搞懂合成孔径、MIMO、相控阵雷达到底怎么选(附应用场景对比)
  • Mac/Win双平台实测:最新VSCode + Unity 2022 智能提示失效?手把手教你搞定OmniSharp
  • 收藏!2026 年版|毕业三年,零基础自学大模型成功上岸,我只用了 9 个月
  • 保姆级教程:用MicroPython在K210上接收STM32串口数据(附完整代码与引脚映射避坑)
  • C++26合约与模块(Modules)协同失效案例(#include <contract>未定义!):MSVC 19.42 / GCC 14.2双平台修复手册
  • 告别console.log式调试:VSCode AI智能变量推演与上下文回溯技术(仅限VSCode 1.89+私有API)
  • 2026江诗丹顿名表回收全解析:鉴定、估价与选型指南 - 优质品牌商家