
2025-11-27:为视频标题生成标签。用go语言,给定一个字符串 caption(视频标题),按下面顺序处理并输出一个标签:
1 <= caption.length <= 150。
caption 仅由英文字母和 ' ' 组成。
输入: caption = "Leetcode daily streak achieved"。
输出: "#leetcodeDailyStreakAchieved"。
解释:
除了 "leetcode" 以外的所有单词的首字母需要大写。
题目来自力扣3582。
caption 全部转换为小写字母。这一步旨在统一大小写,为后续的标题格式转换做准备。例如,"Leetcode daily streak achieved" 会被转换为 "leetcode daily streak achieved"。转换通过 strings.ToLower 实现,它会遍历字符串中的每个字符并将其小写化。cases.Title 转换器(针对英语配置)将字符串转换为标题格式。标题格式的定义是:每个单词的首字母大写,其余字母保持小写。例如,"leetcode daily streak achieved" 会被转换为 "Leetcode Daily Streak Achieved"。这一步骤确保了单词边界的正确识别,与标准的标题格式化逻辑一致。"Leetcode Daily Streak Achieved" 在移除空格后变为 "LeetcodeDailyStreakAchieved"。此时,字符串已具备驼峰形式的雏形,但第一个单词的首字母仍是大写的。# 并调整首单词为全小写
在驼峰形式字符串的开头添加#字符。然后,将#后的第一个字符(即原第一个单词的首字母)转换为小写,以确保第一个单词全部小写,而后续单词保持首字母大写。例如,"LeetcodeDailyStreakAchieved"添加#后变为"#LeetcodeDailyStreakAchieved",接着将首字母L小写化为l,最终得到"#leetcodeDailyStreakAchieved"。这一步通过字符串拼接和unicode.ToLower 实现。# 外的英文字母(A-Z、a-z)。但由于输入字符串 caption 仅包含英文字母和空格,且空格已在步骤3中被移除,因此无需额外过滤操作。这一约束条件自动满足了要求。#)。如果长度超过100个字符,则保留前100个字符,截断右侧多余部分。例如,若结果字符串为120字符,则截取前100字符。这一步通过切片操作实现,确保输出符合长度限制。ToLower 和 Title 转换器)各需遍历字符串一次,时间复杂度为 O(n)。ReplaceAll)需遍历并构建新字符串,时间复杂度为 O(n)。# 和调整首字母涉及字符串拼接和切片,最坏情况下需复制字符串,时间复杂度为 O(n)。caption 的长度。ToLower 和 Title 转换各产生一个新字符串,ReplaceAll 和拼接操作也会分配新内存。因此,总额外空间复杂度为 O(n)。"#leetcodeDailyStreakAchieved" 符合题目要求:首单词全小写,后续单词首字母大写,且以 # 开头。.
package main
import (
"fmt"
"strings"
"unicode"
"golang.org/x/text/cases"
"golang.org/x/text/language"
)
func generateTag(caption string)string {
s := strings.ToLower(caption)
// s = strings.Title(s) // 所有单词首字母大写
// 创建一个指定语言的 Title Caser
caser := cases.Title(language.English)
// 对字符串进行转换
s = caser.String(s)
s = strings.ReplaceAll(s, " ", "")
if s == "" {
return"#"
}
s = "#" + string(unicode.ToLower(rune(s[0]))) + s[1:]
iflen(s) >= 100 {
s = s[:100]
}
return s
}
func main() {
caption := "Leetcode daily streak achieved"
result := generateTag(caption)
fmt.Println(result)
}

.
# -*-coding:utf-8-*-
importstring
def generate_tag(caption):
s = caption.lower()
# 使用 Python 的 title() 方法进行标题转换
# 注意:Python 的 title() 与 Go 的 cases.Title 行为略有不同
s = s.title()
s = s.replace(" ", "")
if not s:
return"#"
# 将第一个字符转换为小写,并在前面添加 #
s = "#" + s[0].lower() + s[1:]
# 如果长度超过100,截断
iflen(s) >= 100:
s = s[:100]
return s
def main():
caption = "Leetcode daily streak achieved"
result = generate_tag(caption)
print(result)
if __name__ == "__main__":
main()
.
#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
#include <sstream>
std::string toLowerCase(const std::string &str) {
std::string result = str;
std::transform(result.begin(), result.end(), result.begin(),
[](unsigned char c){ return std::tolower(c); });
return result;
}
// Title Case:每个单词首字母大写
std::string toTitleCase(const std::string &str) {
std::stringstream ss(str);
std::string word, result;
while (ss >> word) {
if (!word.empty()) {
word[0] = std::toupper(static_cast<unsigned char>(word[0]));
if (word.size() > 1) {
std::transform(word.begin() + 1, word.end(), word.begin() + 1,
[](unsigned char c){ return std::tolower(c); });
}
result += word + " ";
}
}
if (!result.empty()) {
result.pop_back(); // 去掉最后一个空格
}
return result;
}
std::string generateTag(const std::string &caption) {
std::string s = toLowerCase(caption); // 全部转小写
s = toTitleCase(s); // 每个单词首字母大写
s.erase(std::remove(s.begin(), s.end(), ' '), s.end()); // 删除空格
if (s.empty()) {
return"#";
}
// 第一个字母小写
s[0] = static_cast<char>(std::tolower(static_cast<unsigned char>(s[0])));
// 加上 #
s = "#" + s;
// 长度限制为100
if (s.size() > 100) {
s = s.substr(0, 100);
}
return s;
}
int main() {
std::string caption = "Leetcode daily streak achieved";
std::string result = generateTag(caption);
std::cout << result << std::endl;
return0;
}

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