Problem

A sentence is a list of words that are separated by a single space with no leading or trailing spaces. Each of the words consists of only uppercase and lowercase English letters (no punctuation).

  • For example, "Hello World", "HELLO", and "hello world hello world" are all sentences.

You are given a sentence s​​​​​​ and an integer k​​​​​​. You want to truncate s​​​​​​ such that it contains only the first k​​​​​​ words. Return s​​​​ ​​ aftertruncating it.

Examples

Example 1

1
2
3
4
5
6
Input: s = "Hello how are you Contestant", k = 4
Output: "Hello how are you"
Explanation:
The words in s are ["Hello", "how" "are", "you", "Contestant"].
The first 4 words are ["Hello", "how", "are", "you"].
Hence, you should return "Hello how are you".

Example 2

1
2
3
4
5
6
Input: s = "What is the solution to this problem", k = 4
Output: "What is the solution"
Explanation:
The words in s are ["What", "is" "the", "solution", "to", "this", "problem"].
The first 4 words are ["What", "is", "the", "solution"].
Hence, you should return "What is the solution".

Example 3

1
2
Input: s = "chopper is not a tanuki", k = 5
Output: "chopper is not a tanuki"

Constraints

  • 1 <= s.length <= 500
  • k is in the range [1, the number of words in s].
  • s consist of only lowercase and uppercase English letters and spaces.
  • The words in s are separated by a single space.
  • There are no leading or trailing spaces.

Solution

Method 1 – Split and Join

Intuition

Split the sentence into words, take the first k, and join them back.

Approach

  1. Split the string by spaces.
  2. Take the first k words.
  3. Join them with spaces.

Code

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
class Solution {
    public String truncateSentence(String s, int k) {
        String[] words = s.split(" ");
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < k; ++i) {
            if (i > 0) sb.append(" ");
            sb.append(words[i]);
        }
        return sb.toString();
    }
}
1
2
def truncateSentence(s, k):
    return ' '.join(s.split()[:k])

Complexity

  • ⏰ Time complexity: O(n) — n = length of s.
  • 🧺 Space complexity: O(n) — For the output string and split array.