/ app

Interview Practice 10 - Reverse Sentence

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 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 < 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 InterviewPractice10 { 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")); } }