Easy
题目描述
给你一个字符串 title,它由一个或多个单词组成,单词之间用单个空格分隔,每个单词由英文字母组成。请你按以下规则将字符串首字母大写:
- 如果单词的长度为 1 或 2 个字母,需要将所有字母转换为小写。
- 否则,将首字母转换为大写,其余字母转换为小写。
返回首字母大写后的字符串。
示例 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 <= 100title由若干用单个空格分隔的单词组成,且不含前导或尾随空格- 每个单词由大小写英文字母组成,且非空
解题思路
这是一个字符串处理题,需要根据单词长度进行不同的大小写转换。
解题思路:
- 分割单词:将字符串按空格分割成单词数组
- 逐个处理:对每个单词根据长度规则进行处理:
- 长度 ≤ 2:全部转为小写
- 长度 > 2:首字母大写,其余小写
- 重新拼接:将处理后的单词用空格重新连接
实现方法:
- 方法一(推荐):使用内置的分割函数,简洁明了
- 方法二:手动遍历字符串,逐字符处理,空间复杂度更优
两种方法时间复杂度相同,但方法一代码更简洁易懂,是面试中的优选方案。
关键细节:
- 注意单词长度的判断条件(≤2 还是 >2)
- 字符大小写转换的实现
- 最终结果的拼接方式
代码实现
class Solution {
public:
string capitalizeTitle(string title) {
stringstream ss(title);
string word;
string result;
while (ss >> word) {
if (!result.empty()) {
result += " ";
}
if (word.length() <= 2) {
for (char& c : word) {
c = tolower(c);
}
} else {
word[0] = toupper(word[0]);
for (int i = 1; i < word.length(); i++) {
word[i] = tolower(word[i]);
}
}
result += word;
}
return result;
}
};
class Solution:
def capitalizeTitle(self, title: str) -> str:
words = title.split()
result = []
for word in words:
if len(word) <= 2:
result.append(word.lower())
else:
result.append(word[0].upper() + word[1:].lower())
return ' '.join(result)
public class Solution {
public string CapitalizeTitle(string title) {
string[] words = title.Split(' ');
for (int i = 0; i < words.Length; i++) {
if (words[i].Length <= 2) {
words[i] = words[i].ToLower();
} else {
words[i] = char.ToUpper(words[i][0]) + words[i].Substring(1).ToLower();
}
}
return string.Join(" ", words);
}
}
var capitalizeTitle = function(title) {
return title.split(' ').map(word => {
if (word.length <= 2) {
return word.toLowerCase();
} else {
return word[0].toUpperCase() + word.slice(1).toLowerCase();
}
}).join(' ');
};
复杂度分析
| 复杂度类型 | 大小 | 说明 |
|---|---|---|
| 时间复杂度 | O(n) | n 是字符串长度,需要遍历每个字符一次 |
| 空间复杂度 | O(n) | 需要额外空间存储分割后的单词和结果字符串 |
相关题目
. Detect Capital (Easy)
. To Lower Case (Easy)