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

🤖 AI总结

主题

用Go语言实现反转元音数量与首单词相同的单词算法。

摘要

本文介绍了一个用Go语言实现的算法,根据首单词元音数反转后续单词,并提供了Python和C++代码示例。

关键信息

  • 1 统计第一个单词的元音数k
  • 2 遍历后续单词,元音数等于k则反转
  • 3 最终按原顺序拼接输出

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完整代码如下:

    package main

    import (
    "fmt"
    "slices"
    "strings"
    )

    func countVowel(s string) (vowel int) {
    for _, c := range s {
    if strings.IndexRune("aeiou", c) >= 0 {
    vowel++
    }
    }
    return
    }

    func reverseWords(s string)string {
    a := strings.Split(s, " ")
    cnt0 := countVowel(a[0])
    for i := 1; i < len(a); i++ {
    if countVowel(a[i]) == cnt0 {
    t := []byte(a[i])
    slices.Reverse(t)
    a[i] = string(t)
    }
    }
    return strings.Join(a, " ")
    }

    func main() {
    s := "cat and mice"
    result := reverseWords(s)
    fmt.Println(result)
    }

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

    Python完整代码如下:

    # -*-coding:utf-8-*-

    def count_vowel(s: str) -> int:
    """Count vowels in a string"""
    vowel = 0
    for c in s:
    if c in "aeiou":
    vowel += 1
    return vowel

    def reverse_words(s: str) -> str:
    """Reverse words that have the same vowel count as the first word"""
    words = s.split(" ")
    cnt0 = count_vowel(words[0])
    for i in range(1, len(words)):
    if count_vowel(words[i]) == cnt0:
    # Reverse the word
    words[i] = words[i][::-1]
    return" ".join(words)

    def main():
    s = "cat and mice"
    result = reverse_words(s)
    print(result)

    if __name__ == "__main__":
    main()

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

    C++完整代码如下:

      
    



    int countVowel(const std::string& s) {
    int vowel = 0;
    std::string vowels = "aeiou";
    for (char c : s) {
    if (vowels.find(c) != std::string::npos) {
    vowel++;
    }
    }
    return vowel;
    }

    std::string reverseWords(const std::string& s) {
    // Split string into words
    std::vector string > words;
    std::stringstream ss(s);
    std:: string word;

    while (ss >> word) {
    words.push_back(word);
    }

    if (words.empty()) {
    return "" ;
    }

    int cnt0 = countVowel(words[ 0 ]);

    for (size_t i = 1 ; i < words.size(); i++) {
    if (countVowel(words[i]) == cnt0) {
    // Reverse the word
    std::reverse(words[i].begin(), words[i].end());
    }
    }

    // Join the words back
    std:: string result;
    for (size_t i = 0 ; i < words.size(); i++) {
    if (i > 0 ) {
    result += " " ;
    }
    result += words[i];
    }

    return result;
    }

    int main() {
    std:: string s = "cat and mice" ;
    std:: string result = reverseWords(s);
    std::cout << result << std::endl;
    return 0 ;
    }

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

    我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。 欢迎关注“福大大架构师每日一题”,发消息可获得面试资料,让AI助力您的未来发展。

    © 版权声明

    相关文章