题目:
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词是指仅由字母组成、不包含任何空格字符的最大子字符串。
方法:从最后一个元素往前遍历,在找到第一个非空格的字符后又从该处开始新的遍历,找到空格后返回两次遍历的索引差
var lengthOfLastWord = function(s) {
for(let i=s.length-1;i>=0;i--){
if (s[i]!==' '){
for(j=i;j>=0;j--){
if(s[j]==' ') return i-j
if(j==0) return i-j+1
}
}
}
};
嵌套for循环时间复杂度大,可以优化:不需要第一个遍历去找第一个非空格字符,而是在拿到空格时计数器不增加,非空格时计数器加一,由此,在计数器不为零&&找到空格时,说明最后一个单词已遍历完,此时返回计数器值
var lengthOfLastWord = function (s) {
let num = 0
for (let i = s.length - 1; i >= 0; i--) {
if (s[i] == ' ') {
if(num==0) continue //末尾空格不做处理
break //非末尾空格直接退出循环
}
if(s[i]!==' ') num++ //非空格字符计数
}
return num
};