题目:
给你一个字符串 s
,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
我的思路:
/**
* @param {string} s
* @return {number}
*/
var lengthOfLastWord = function (s) {
var arr = [];
var si = 0;
var len = 0;
//先转成数组,找到最后一个空格的索引号
s.trim().split("").forEach(function (item, index, array) {
arr.push(item);
if (item == " ") {
si = index;
}
len = arr.length - si -1;
})
return len
};
官方答案:反向遍历
题目要求得到字符串中最后一个单词的长度,可以反向遍历字符串,寻找最后一个单词并计算其长度。
由于字符串中至少存在一个单词,因此字符串中一定有字母。首先找到字符串中的最后一个字母,该字母即为最后一个单词的最后一个字母。
从最后一个字母开始继续反向遍历字符串,直到遇到空格或者到达字符串的起始位置。遍历到的每个字母都是最后一个单词中的字母,因此遍历到的字母数量即为最后一个单词的长度。
var lengthOfLastWord = function(s) {
let index = s.length - 1;
while (s[index] === ' ') {
index--;
}
let wordLength = 0;
while (index >= 0 && s[index] !== ' ') {
wordLength++;
index--;
}
return wordLength;
};
答案二:
要有双指针思维,创建变量接收
从右往左读取数据不仅是reverse,还可以for循环,i从最大开始
var lengthOfLastWord = function (s) {
let count = 0;
for (let i = s.length - 1; i >= 0; i--) {
if (s[i] == " " && count == 0) continue;
if (s[i] != " ") count++;
if (s[i] == " ") break;
}
return count;
};
知识点补充:
字符串也有长度和索引,不需要每次转换为数组。
"aaa".length //3
"aaa"[0] //a