2129.将标题首字母大写

【LetMeFly】2129.将标题首字母大写:模拟(一个变量记录是否该大写)

力扣题目链接:https://leetcode.cn/problems/capitalize-the-title/

给你一个字符串 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 由单个空格隔开的单词组成,且不含有任何前导或后缀空格。
  • 每个单词由大写和小写英文字母组成,且都是 非空 的。

方法一:模拟(一个变量记录是否该大写)

_方法千万个,能过第一个。_

可以用一个变量shouldUpper来记录下一个字符是否应该大写。

遍历字符串:

  • 如果当前字符为空格:将shouldUpper赋值为“还有至少3个字符后三个字符都为字母
  • 否则,根据shouldUpper的值将当前字符修改为大写或小写,之后将shouldUpper修改为false
  • 时间复杂度$O(len(title))$
  • 空间复杂度:对于可变字符串的编程语言如C++, $O(1)$;对于不可变字符串的编程语言如Python, $O(len(title))$

AC代码

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public:
string capitalizeTitle(string title) {
bool shouldUpper = title.size() >= 3 && title[1] != ' ' && title[2] != ' ';
for (int i = 0; i < title.size(); i++) {
if (title[i] == ' ') {
shouldUpper = i + 3 < title.size() && title[i + 2] != ' ' && title[i + 3] != ' ';
continue;
}
title[i] = shouldUpper ? toupper(title[i]) : tolower(title[i]);
shouldUpper = false;
}
return title;
}
};

Python

1
2
3
4
5
6
7
8
9
10
11
12
class Solution:
def capitalizeTitle(self, title: str) -> str:
shouldUpper = len(title) >= 3 and title[1] != ' ' and title[2] != ' '
ans_list = []
for i in range(len(title)):
if title[i] == ' ':
shouldUpper = i + 3 < len(title) and title[i + 2] != ' ' and title[i + 3] != ' '
ans_list.append(' ') # 不同于可变数组的语言,这里记得也要加上空格
continue
ans_list.append(title[i].upper() if shouldUpper else title[i].lower())
shouldUpper = False
return ''.join(ans_list)

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/136614914


2129.将标题首字母大写
https://blog.letmefly.xyz/2024/03/11/LeetCode 2129.将标题首字母大写/
作者
Tisfy
发布于
2024年3月11日
许可协议