Question

Formatted question description: https://leetcode.ca/all/58.html

Given a string s consisting of words and spaces, return the length of the last word in the string.

A word is a maximal substring consisting of non-space characters only.

Example 1:

Input: s = "Hello World"
Output: 5
Explanation: The last word is "World" with length 5.


Example 2:

Input: s = "   fly me   to   the moon  "
Output: 4
Explanation: The last word is "moon" with length 4.


Example 3:

Input: s = "luffy is still joyboy"
Output: 6
Explanation: The last word is "joyboy" with length 6.


Constraints:

• 1 <= s.length <= 104
• s consists of only English letters and spaces ' '.
• There will be at least one word in s.

Algorithm

Preprocess the input string first, remove the spaces at the beginning and the end, and then use a counter to accumulate the length of the non-space string, and clear the counter when it encounters a space.

Code

• 
public class Length_of_Last_Word {

public class Solution_no_extra_space { // one scan
public int lengthOfLastWord(String s) {
if (s == null || s.length() == 0) {
return 0;
}

int count = 0;
for (int i = s.length() - 1; i >= 0; i--) {

if (count == 0 && s.charAt(i) != ' ') { // skip spaces
count++;
} else if (count != 0 && s.charAt(i) == ' ') {
break;
} else if (('a' <= s.charAt(i) && s.charAt(i) <= 'z') || ('A' <= s.charAt(i) && s.charAt(i) <= 'Z')) {
count++;
}
}

return count;

}
}

public class Solution {
public int lengthOfLastWord(String s) {

if (s == null || s.length() == 0) {
return 0;
}

String[] array = s.split(" "); // @note: if input is string with spaces “ “, the array length is 0

if (array.length == 0) {
return 0;
} else {
return array[array.length - 1].length();
}

}
}

}

############

class Solution {
public int lengthOfLastWord(String s) {
int i = s.length() - 1;
while (i >= 0 && s.charAt(i) == ' ') {
--i;
}
int j = i;
while (j >= 0 && s.charAt(j) != ' ') {
--j;
}
return i - j;
}
}

• // OJ: https://leetcode.com/problems/length-of-last-word/
// Time: O(N)
// Space: O(1)
class Solution {
public:
int lengthOfLastWord(string s) {
int i = s.size() - 1;
while (i >= 0 && s[i] == ' ') --i;
int j = i;
while (i >= 0 && s[i] != ' ') --i;
return j - i;
}
};

• class Solution:
def lengthOfLastWord(self, s: str) -> int:
i = len(s) - 1
while i >= 0 and s[i] == ' ':
i -= 1
j = i
while j >= 0 and s[j] != ' ':
j -= 1
return i - j

############

class Solution(object):
def lengthOfLastWord(self, s):
"""
:type s: str
:rtype: int
"""
if len(s) == 0:
return 0
s = s.split()
if len(s) > 0:
return len(s[-1])
return 0


• func lengthOfLastWord(s string) int {
i := len(s) - 1
for i >= 0 && s[i] == ' ' {
i--
}
j := i
for j >= 0 && s[j] != ' ' {
j--
}
return i - j
}

• function lengthOfLastWord(s: string): number {
s = s.trimEnd();
const n = s.length;
const index = s.lastIndexOf(' ');
if (index !== -1) {
return n - index - 1;
}
return n;
}


• /**
* @param {string} s
* @return {number}
*/
var lengthOfLastWord = function (s) {
let i = s.length - 1;
while (i >= 0 && s[i] === ' ') {
--i;
}
let j = i;
while (j >= 0 && s[j] !== ' ') {
--j;
}
return i - j;
};


• class Solution {
/**
* @param String $s * @return Integer */ function lengthOfLastWord($s) {
$count = 0; while ($s[strlen($s) - 1] == " ") {$s = substr($s, 0, -1); } while (strlen($s) != 0 && $s[strlen($s) - 1] != " ") {
$count++;$s = substr($s, 0, -1); } return$count;
}
}

• impl Solution {
pub fn length_of_last_word(s: String) -> i32 {
let s = s.trim_end();
let n = s.len();
for (i, c) in s.char_indices().rev() {
if c == ' ' {
return (n - i - 1) as i32;
}
}
n as i32
}
}


• public class Solution {
public int LengthOfLastWord(string s) {
int i = s.Length - 1;
while (i >= 0 && s[i] == ' ') {
--i;
}
int j = i;
while (j >= 0 && s[j] != ' ') {
--j;
}
return i - j;
}
}