You've successfully subscribed to Nicholas Workshop
Great! Next, complete checkout for full access to Nicholas Workshop
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.
Success! Your billing info is updated.
Billing info update failed.

Reverse Sentence

Nicholas Wong
Nicholas Wong

Question

Simple task, reverse words in a sentence.

Solution

In Python, this can be simple because of the build-in functions. We can just split the sentence by spaces, reverse the list, and join them with spaces again.

In C++, this can be complicated. The following might be one of the possible answers. We have to scan from the head to tail, and find the position that a word starts and ends. Then reverse the letters in this word. At the end, reverse all the letters in the whole sentence.

Examples

# function to reverse a sentence 
def reverse_sentence(sentence): 
    return ' '.join(reversed(sentence.split())) 

# main 
print reverse_sentence("I am a student.") 
print reverse_sentence("Testing 1 2 3")
#include <iostream>
using namespace std;

// function to reverse a word, in place 
void reverse_word(string * word, int begin, int end) {
  while (begin < end) {
    char letter = word -> at(begin);
    word -> at(begin) = word -> at(end);
    word -> at(end) = letter;
    begin++;
    end--;
  }
} 

// function to reverse a sentence, in place 
void reverse_sentence(string * sentence) {
  int length = sentence -> size();
  int pointer = 0; // for each character 
  for (int i = 0; i < (int)sentence->size(); i++) { // find word head 
    if (pointer == -1) {
      if (sentence -> at(i) != ' ') pointer = i;
      continue;
    } 
    // find word tail 
    if (sentence -> at(i) == ' ') {
      reverse_word(sentence, pointer, i - 1);
      pointer = -1;
    } 
    // end of string
    if (i == length - 1) {
      reverse_word(sentence, pointer, i - 1);
    }
  } 
  // reverse letters for the whole sentence 
  reverse_word(sentence, 0, sentence -> size() - 1);
} 

// main part 
int main() {
  string text = "I am a student.";
  reverse_sentence( & text);
  cout << text << endl;
}
public class Solution {
  
    private static String reverse_sentence(String sentence) {
        String[] splited = sentence.split(" ");
        StringBuilder builder = new StringBuilder();
        for (int i = splited.length - 1; i >= 0; i--) {
            builder.append(splited[i]);
            if (i > 0) builder.append(" ");
        }
        return builder.toString();
    }
  
    public static void main(String[] args) {
        System.out.println(reverse_sentence("I am a student."));
        System.out.println(reverse_sentence("Testing 1 2 3"));
    }
}
Algorithm

Nicholas Wong

Fullstack software engineer with strong background in computer science and extensive experience in software engineering and architecture. Studied in NYU, worked in Yahoo, Rakuten and Manulife.