当前位置: 首页 > 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.cnnetsun.cn/news/2076261.html

相关文章:

  • MATLAB GPU加速避坑指南:从‘搬砖’到‘起飞’,我的三个关键教训
  • 实测5款AI论文工具,我明白了什么才是真正的“过稿神器”:好写作AI凭什么能同时解决查重和AIGC?
  • Weka机器学习标准化流程:从数据预处理到模型部署
  • 深度学习优化算法Adam的核心原理与实践技巧
  • Uni-app图片上传别再踩坑了!手把手教你搞定6MB限制和GIF格式过滤
  • LayerNorm、BatchNorm、RMSNorm(个人理解)
  • Python强化学习:从基础概念到工程实践
  • 别让你的 Agent 变成一根筋:揭秘“多步推理与自我纠错”的工程黑魔法
  • 最强生图模型GPT-image-2,一手深度测评,附教程!
  • WESTINGHOUSE 3A99132G01电源卡
  • 小白/程序员必看!2026年转行网络安全全攻略:6个月高薪入行 附学习路线+避坑指南
  • 神经系统与深度学习介绍 学习笔记day1
  • VSCode跨端调试配置再也别抄博客了!20年调试专家私藏的7个yaml校验checklist,第5条99%人忽略
  • PowerShell与JSON的精妙转换
  • ROS2数据回放分析新选择:用Foxglove Studio离线解析.db3 bag文件(附MCAP转换教程)
  • Meilisearch MCP服务器:连接AI助手与搜索引擎的实践指南
  • Flink CDC sinks to Hudi on Databricks based on ADLS.
  • 使用 Docker 搭建 Maven 私服
  • CefFlashBrowser:如何在2024年完美播放Flash游戏和课件的终极指南
  • ChatGPT提示工程:原理、技巧与实践指南
  • 机器学习中不平衡分类问题的采样策略与实践
  • Fara-7B:基于视觉的AI智能体,实现端到端计算机自动化操作
  • 人大金仓-数据库表及字段查询
  • Drawboard PDF免费版被砍后,我的7个工具位怎么分配最合理?(附颜色配置方案)
  • T型三电平逆变器七段式SVM空间矢量的中点电位平衡控制仿真、附参考资料
  • 别再硬碰硬了!用Python+ROS2手把手实现机器人导纳控制(附UR5仿真代码)
  • AI圈大洗牌:智谱Anthropic集体涨价,老用户直呼“被背刺“!
  • 院内MDT多学科会诊解决方案简析
  • 气候智能体开发认证:软件测试从业者的新航道与新价值
  • 深度解析Tiled插件开发:打造游戏引擎专属地图导出器