2129-将标题首字母大写

Raphael Liu Lv10

给你一个字符串 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 字符串,对于其中每个以空格为分界的单词,我们首先找出它的起始与末尾下标,判断它的长度以进行相应操作:

  • 如果长度小于等于 2,则我们将该单词全部转化为小写;

  • 如果长度大于 2,则我们将该单词首字母转化为大写,其余字母转化为小写。

最终,我们将转化后的字符串返回作为答案。

另外,对于 Python 等无法直接对字符串特定字符进行修改的语言,我们可以先将字符串分割为单词,并用数组按顺序储存这些单词。随后,我们逐单词进行上述操作生成新的单词并替换。最后,我们将替换后的单词数组拼接为空格连接的字符串并返回作为答案。

代码

[sol1-C++]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public:
string capitalizeTitle(string title) {
int n = title.size();
int l = 0, r = 0; // 单词左右边界(左闭右开)
title.push_back(' '); // 避免处理末尾的边界条件
while (r < n) {
while (title[r] != ' ') {
++r;
}
// 对于每个单词按要求处理
if (r - l > 2) {
title[l] = toupper(title[l]);
++l;
}
while (l < r) {
title[l] = tolower(title[l]);
++l;
}
l = r + 1;
++r;
}
title.pop_back();
return title;
}
};
[sol1-Python3]
1
2
3
4
5
6
7
8
9
10
class Solution:
def capitalizeTitle(self, title: str) -> str:
res = [] # 辅助数组
for word in title.split():
# 对于分割的每个单词按要求处理
if len(word) <= 2:
res.append(word.lower())
else:
res.append(word[0].upper() + word[1:].lower())
return ' '.join(res)

复杂度分析

  • 时间复杂度:O(n),其中 n 为 title 的长度。即为遍历字符串完成操作的时间复杂度。

  • 空间复杂度:由于不同语言的字符串相关方法实现有所不同,因此空间复杂度也有所不同:

    • C++}:O(1)。
    • Python}:O(n),即为辅助数组的空间开销。
 Comments
On this page
2129-将标题首字母大写