2026-06-26:移除尾部元音字母。用go语言,给定一个只包含小写英文字母的字符串 s。需要从字符串末尾开始,逐个向前检查:把所有出现在末尾的元音字母(a、

29 阅读3分钟

2026-06-26:移除尾部元音字母。用go语言,给定一个只包含小写英文字母的字符串 s。需要从字符串末尾开始,逐个向前检查:把所有出现在末尾的元音字母(a、e、i、o、u)都删掉。最终返回删完这些“尾部连续元音”后剩下的字符串。

1 <= s.length <= 100。

s 仅由小写英文字母组成。

输入: s = "idea"。

输出: "id"。

解释:

移除 "idea" 后,得到字符串 "id"。

题目来自力扣3856。

分步详细执行过程

步骤1:主程序初始化变量

执行 s := "idea",内存中生成完整字符串字符序列,字符从左到右依次为:索引0=i,索引1=d,索引2=e,索引3=a,完整字符序列:[i, d, e, a],字符串长度为4。

步骤2:调用处理函数 trimTrailingVowels(s)

把字符串 idea 传入函数,函数内部执行 strings.TrimRight(s, "aeiou"),进入库函数截断逻辑,逐轮从尾部校验:

第1轮校验(最末尾字符:索引3,字符a)

字符 a 在元音集合 aeiou 内,满足删除条件,直接截掉末尾的a,剩余字符串:ide,字符序列 [i, d, e]

第2轮校验(当前新末尾字符:索引2,字符e)

字符 e 在元音集合内,满足删除条件,截掉末尾的e,剩余字符串:id,字符序列 [i, d]

第3轮校验(当前新末尾字符:索引1,字符d)

字符 d 不在元音集合中,不满足删除条件,立刻终止尾部截断循环,不再向前检查。

步骤3:函数返回结果

截断停止后剩余字符串 id 作为函数返回值,赋值给变量 result

步骤4:打印输出

执行 fmt.Println(result),控制台输出最终结果字符串 id,流程全部结束。

时间复杂度分析

设输入字符串长度为 n。

  1. strings.TrimRight 只会从尾部向前遍历,最坏情况整个字符串全是元音,需要遍历全部 n 个字符;
  2. 其余操作(函数调用、变量赋值、打印)均为常数时间 O(1); 整体总时间复杂度:O(n)

额外空间复杂度分析

  1. Go中字符串是不可变类型,截断操作会生成一段全新字符串存储结果;
  2. 额外存储的新字符串最长为原字符串长度 n,无额外数组、切片、哈希等辅助容器; 整体总额外空间复杂度:O(n)

Go完整代码如下:

package main

import (
	"fmt"
	"strings"
)

func trimTrailingVowels(s string) string {
	return strings.TrimRight(s, "aeiou")
}

func main() {
	s := "idea"
	result := trimTrailingVowels(s)
	fmt.Println(result)
}

在这里插入图片描述

Python完整代码如下:

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

def trim_trailing_vowels(s: str) -> str:
    """
    移除字符串末尾所有的元音字母(小写 a/e/i/o/u)。
    与 Go 的 strings.TrimRight(s, "aeiou") 行为一致。
    """
    return s.rstrip('aeiou')

def main() -> None:
    s = "idea"
    result = trim_trailing_vowels(s)
    print(result)  # 输出: id

if __name__ == "__main__":
    main()

在这里插入图片描述

C++完整代码如下:

#include <iostream>
#include <string>

std::string trimTrailingVowels(const std::string& s) {
    // 查找最后一个不属于元音集合的字符位置
    size_t pos = s.find_last_not_of("aeiou");
    if (pos == std::string::npos) {
        // 如果全是元音,返回空字符串
        return "";
    }
    // 保留从开头到 pos 的子串(包含 pos 处的字符)
    return s.substr(0, pos + 1);
}

int main() {
    std::string s = "idea";
    std::string result = trimTrailingVowels(s);
    std::cout << result << std::endl;
    return 0;
}

在这里插入图片描述