题目

确保字符串的每个单词首字母都大写,其余部分小写。像’the’和’of’这样的连接符同理。

String.split()

  • titleCase(“I’m a little tea pot”) 应该返回一个字符串.
  • titleCase(“I’m a little tea pot”) 应该返回 “I’m A Little Tea Pot”.
  • titleCase(“sHoRt AnD sToUt”)应该返回 “Short And Stout”.
  • titleCase(“HERE IS MY HANDLE HERE IS MY SPOUT”) 应该返回 “Here Is My Handle Here Is My Spout”.

思路

拿到这道题目的时候,距离上一次刷算法已经是3年前了,作为现在初学javascript的菜鸟,好多方法都得现去查找,这个不知道不要紧,但是思路很重要,所以我当时的想法就是一步一步来呗。

  1. 先将字符串全部转换为小写字母,而且把他分割成数组。
  2. 然后遍历数组,方法是将首字母大写,然后其他字母小写,但是后来我发现多此一举了,因为你最开始第一步全部都把字母转换为了小写字母了。

代码

1
2
3
4
5
6
7
8
function titleCase(str) {
var array = str.toLowerCase().split(" ");
for (var i = 0; i < array.length; i++) {
array[i] = array[i].charAt(0).toUpperCase() + array[i].slice(1).toLowerCase();
}
return array.join(" ");
}
titleCase("I'm a little tea pot");

但是后来认为性能不足,没错,就是上面那个所谓的

i < array.length;

没缓存,影响性能。
定义一个变量,缓存一下,然后又优化了一下代码。

最终代码

1
2
3
4
5
6
7
8
9
function titleCase(str) {
var array = str.split(" ");
for(i=0,len=array.length;i<len;i++){
array[i] = array[i].charAt(0).toUpperCase() + array[i].slice(1).toLowerCase();
}
return array.join(" ");
}

titleCase("I'm a little tea pot");

在javascript算法道路上越战越勇!