Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions src/main/java/com/thealgorithms/strings/LengthOfLastWord.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.thealgorithms.strings;

/**
* The {@code LengthOfLastWord} class provides a utility method to determine
* the length of the last word in a given string.
*
* <p>A "word" is defined as a maximal substring consisting of non-space
* characters only. Trailing spaces at the end of the string are ignored.
*
* <p><strong>Example:</strong>
* <pre>{@code
* LengthOfLastWord obj = new LengthOfLastWord();
* System.out.println(obj.lengthOfLastWord("Hello World")); // Output: 5
* System.out.println(obj.lengthOfLastWord(" fly me to the moon ")); // Output: 4
* System.out.println(obj.lengthOfLastWord("luffy is still joyboy")); // Output: 6
* }</pre>
*
* <p>This implementation runs in O(n) time complexity, where n is the length
* of the input string, and uses O(1) additional space.
*/
public class LengthOfLastWord {

/**
* Returns the length of the last word in the specified string.
*
* <p>The method iterates from the end of the string, skipping trailing
* spaces first, and then counts the number of consecutive non-space characters
* characters until another space (or the beginning of the string) is reached.
*
* @param s the input string to analyze
* @return the length of the last word in {@code s}; returns 0 if there is no word
* @throws NullPointerException if {@code s} is {@code null}
*/
public int lengthOfLastWord(String s) {
int sizeOfString = s.length() - 1;
int lastWordLength = 0;

// Skip trailing spaces from the end of the string
while (sizeOfString >= 0 && s.charAt(sizeOfString) == ' ') {
sizeOfString--;
}

// Count the characters of the last word
while (sizeOfString >= 0 && s.charAt(sizeOfString) != ' ') {
lastWordLength++;
sizeOfString--;
}

return lastWordLength;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.thealgorithms.strings;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class LengthOfLastWordTest {
@Test
public void testLengthOfLastWord() {
assertEquals(5, new LengthOfLastWord().lengthOfLastWord("Hello World"));
assertEquals(4, new LengthOfLastWord().lengthOfLastWord(" fly me to the moon "));
assertEquals(6, new LengthOfLastWord().lengthOfLastWord("luffy is still joyboy"));
assertEquals(5, new LengthOfLastWord().lengthOfLastWord("Hello"));
assertEquals(0, new LengthOfLastWord().lengthOfLastWord(" "));
assertEquals(0, new LengthOfLastWord().lengthOfLastWord(""));
assertEquals(3, new LengthOfLastWord().lengthOfLastWord("JUST LIE "));
}
}