双周赛第69场:LeetCode:5960.将标题首字母大写

184 阅读2分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路

  • 双周赛第69场:LeetCode:5960.将标题首字母大写
    • 时间:2022-01-08
    • 力扣难度:Easy
    • 个人难度:Easy
    • 数据结构:字符串
    • 算法:模拟

双周赛第69场:LeetCode:5960.将标题首字母大写

1. 题目描述

  • 题目:原题链接

    • 给你一个字符串 title ,它由单个空格连接一个或多个单词组成,每个单词都只包含英文字母。请你按以下规则将每个单词的首字母大写 :

      • 如果单词的长度为 1 或者 2 ,所有字母变成小写。
      • 否则,将单词首字母大写,剩余字母变成小写。
    • 请你返回 大写后 的 title 。

  • 输入输出规范

    • 输入:标题字符串title
    • 输出:修正后的标题字符串
  • 输入输出示例

    • 输入:title = "capiTalIze tHe titLe"
    • 输出:"Capitalize The Title"

2. 方法:字符串模拟

  • 思路

    • 直接根据题目要求模拟即可
    • 通过split()方法分割字符串,判断每个单词的长度,并将单词的首字母大写,其他字母小写
    • 通过StringBuilder拼接结果
  • 复杂度分析:n是字符串的长度

    • 时间复杂度:O(n)
    • 空间复杂度:O(n),需要一个字符串数组存放每个单词,数组长度为n/C
  • 题解:直接模拟

    public String capitalizeTitle(String title) {
        if(title == null || title.length() == 0) return null;
        String[] words = title.split(" ");
        StringBuilder sb = new StringBuilder();
        String lowerWord = "";
        for(String word : words) {
            if(word.length() == 0) continue;
            if(word.length() <= 2) {
                sb.append(word.toLowerCase()).append(" ");
            }else {
                lowerWord = word.toLowerCase();
                sb.append((char) (lowerWord.charAt(0) + 'A' - 'a')).append(lowerWord.substring(1)).append(" ");
            }
        }
        return sb.deleteCharAt(sb.length() - 1).toString();
    }
    

最后

新人LeetCoder,发布的题解有些会参考其他大佬的思路(参考资料的链接会放在最下面),欢迎大家关注我 ~ ~ ~ 如果本文有所帮助的话,希望大家可以给个三连「点赞」&「收藏」&「关注」 ~ ~ ~ 也希望大家有空的时候光临我的「个人博客」。