将标题首字母大写

标签: 字符串

难度: Easy

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

Submission

运行时间: 16 ms

内存: 15.9 MB

class Solution:
    def capitalizeTitle(self, title: str) -> str:
        cur = title.split(' ')
        for i in range(len(cur)):
            if len(cur[i]) <= 2:
                cur[i] = cur[i].lower()
            else:
                cur[i] = cur[i][0:1].upper() + cur[i][1:].lower()
        return ' '.join(cur)

Explain

题解首先通过split(' ')方法将输入的字符串title分割成单词列表。然后,遍历这个列表,对每个单词进行处理:如果单词的长度小于等于2,将单词转换成全部小写;如果单词的长度大于2,将单词的首字母转换成大写,其余字母转换成小写。最后,使用join(' ')方法将处理后的单词列表重新组合成一个字符串并返回。

时间复杂度: O(n)

空间复杂度: O(n)

class Solution:
    def capitalizeTitle(self, title: str) -> str:
        # 将输入的title字符串按空格分割成单词列表
        cur = title.split(' ')
        # 遍历列表,对每个单词进行大小写转换
        for i in range(len(cur)):
            # 如果单词长度小于等于2,转换成全部小写
            if len(cur[i]) <= 2:
                cur[i] = cur[i].lower()
            else:
                # 否则,单词首字母大写,其余字母小写
                cur[i] = cur[i][0:1].upper() + cur[i][1:].lower()
        # 使用空格将处理后的单词列表连接成一个字符串并返回
        return ' '.join(cur)

Explore

题解中使用的split(' ')方法会将字符串按照每个单独的空格进行分割,这意味着如果输入字符串中存在多个连续的空格,split(' ')将会在单词列表中生成空字符串项。例如,对于输入'hello world'(两个空格),分割结果会是['hello', '', 'world']。处理这样的列表时,中间的空字符串在进行大小写转换时仍会保留为空字符串,最终输出时会保持原有的多空格形式,即'hello world'。这可能不是预期的处理方式,因为通常我们希望忽略额外的空格。

split(' ')和split()在处理空格时有重要的区别。split(' ')使用一个明确的空格字符作为分隔符,会保留字符串中的连续空格作为空字符串处理,而split()在不带参数时会将所有类型的空白字符(空格、制表符、换行符等)视为分割符,并且会忽略字符串开头和结尾的空白字符。例如,对于字符串' hello world ',split(' ')返回['', 'hello', 'world', ''],而split()则返回['hello', 'world']。这意味着使用split()通常更适合处理可能有不规则空白的文本。

题解中的方法在处理包含特殊字符或数字的单词时,会按照相同的规则处理:如果单词长度大于2,首字母大写,其余字母小写。这意味着特殊字符或数字也会被包含在处理中。例如,对于单词'abc1',处理后会成为'Abc1'。这种处理方式可能不总是理想的,因为特殊字符和数字通常不需要进行大小写转换。如果需要更精细的控制,可能需要增加额外的逻辑来判断字符是否应当被转换。

题解中的方法默认所有字符都适用于大小写转换,这在英文环境下是合适的。但对于中文、阿拉伯语等使用非拉丁字母的语言,大小写概念不存在,因此此方法直接应用可能不合适。对于这些语言,可能不需要进行大小写转换,或者应当考虑使用适合特定语言环境的文本处理规则。例如,可以根据语言类型选择是否执行大小写转换,或者引入语言特定的规范化方法。