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 }
复制代码

posted on   自律的Tom  阅读(48)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示