给你一个字符串 title
,它由单个空格连接一个或多个单词组成,每个单词都只包含英文字母。请你按以下规则将每个单词的首字母 大写 :
- 如果单词的长度为
1
或者2
,所有字母变成小写。 - 否则,将单词首字母大写,剩余字母变成小写。
请你返回 大写后 的 title
。
示例 1:
输入:title = "capiTalIze tHe titLe" 输出:"Capitalize The Title" 解释: 由于所有单词的长度都至少为 3 ,将每个单词首字母大写,剩余字母变为小写。
示例 2:
输入:title = "First leTTeR of EACH Word" 输出:"First Letter of Each Word" 解释: 单词 "of" 长度为 2 ,所以它保持完全小写。 其他单词长度都至少为 3 ,所以其他单词首字母大写,剩余字母小写。
示例 3:
输入:title = "i lOve leetcode" 输出:"i Love Leetcode" 解释: 单词 "i" 长度为 1 ,所以它保留小写。 其他单词长度都至少为 3 ,所以其他单词首字母大写,剩余字母小写。
提示:
1 <= title.length <= 100
title
由单个空格隔开的单词组成,且不含有任何前导或后缀空格。- 每个单词由大写和小写英文字母组成,且都是 非空 的。
方法一:模拟
直接模拟,按空格切分字符串,得到每个单词,再按题目转大小写。最后用空格连接每个单词。
时间复杂度 title
的长度。
class Solution:
def capitalizeTitle(self, title: str) -> str:
words = [w.lower() if len(w) < 3 else w.capitalize() for w in title.split()]
return " ".join(words)
class Solution {
public String capitalizeTitle(String title) {
List<String> ans = new ArrayList<>();
for (String s : title.split(" ")) {
if (s.length() < 3) {
ans.add(s.toLowerCase());
} else {
ans.add(s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase());
}
}
return String.join(" ", ans);
}
}
class Solution {
public:
string capitalizeTitle(string title) {
transform(title.begin(), title.end(), title.begin(), ::tolower);
istringstream ss(title);
string ans;
while (ss >> title) {
if (title.size() > 2) title[0] = toupper(title[0]);
ans += title;
ans += " ";
}
ans.pop_back();
return ans;
}
};
func capitalizeTitle(title string) string {
title = strings.ToLower(title)
words := strings.Split(title, " ")
for i, s := range words {
if len(s) > 2 {
words[i] = strings.Title(s)
}
}
return strings.Join(words, " ")
}