leetcode: 2129. 将标题首字母大写

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

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

请你返回 大写后 的 title 。

示例 1:

输入:title = “capiTalIze tHe titLe”

输出:“Capitalize The Titile”

解释: 由于所有单词的长度都至少为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,所以其他单词首字母大写,剩余字母小写。

 

首先我们先将所有单词转为小写,然后我们需要将长度大于2的单词的首字母大写,我们可以遍历字符串title,将字母转为小写加入结果,如果当前字符式空格‘ ’,则说明已经到一个单词的末尾,我们需要一个变量preIdx记录当前单词的首字母下标,判断是否需要将其变为大写(满足条件当前下表-preIdx>2),之后将preIdx赋值成下一个单词首字母的下标(preIdx = 当前下标 + 1),当遍历完字符串之后,我们还要在做一次变大写处理,因为最后一个单词还未处理。

实现代码如下:

 1 class Solution {
 2     public String capitalizeTitle(String title) {
 3         final StringBuilder stringBuilder = new StringBuilder();
 4         int preIdx = 0;
 5         for (int i = 0; i < title.length(); i++) {
 6             final char c = title.charAt(i);
 7             stringBuilder.append(Character.toLowerCase(c));
 8             if (c == ' ') {
 9                 if (i - preIdx > 2) {
10                     stringBuilder.setCharAt(preIdx, Character.toUpperCase(stringBuilder.charAt(preIdx)));
11                 }
12                 preIdx = i + 1;
13             }
14         }
15         if (title.length() - preIdx > 2) {
16             stringBuilder.setCharAt(preIdx, Character.toUpperCase(stringBuilder.charAt(preIdx)));
17         }
18         return stringBuilder.toString();
19     }
20 }

热门相关:1号婚令:早安,大总裁!   佣兵之王都市行   神秘老公,晚上见!   妈妈的朋友   疫群