给你一个字符串 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 }标签:title,2129,大写,单词,首字母,preIdx,小写,leetcode From: https://www.cnblogs.com/gx-tom/p/18067212