Agam Jyot Singh

Reverse Words in a String

In this problem “Reverse words in a String”, we are given an input string s. We need to reverse the order of the words and return a string of the words in reverse order.

Takeaways

In this article we will learn how to reverse words in a string using different approach.

Example

Input :

s = "welcome to scaler topics"

Output :

"topics scaler to welcome"

Example Explanation

The string given to us is “welcome to scaler topics”. To reverse the words of this string, we need to think of a logic to reverse the words and also to remove any leading or trailing spaces. This gives us “topics scaler to welcome”.

Constraints

  • Length of the string s will be between 1 and 104.
  • s could contain English letters (upper-case and lower-case), digits, and spaces ‘ ‘.
  • There is at least one word in s.

Approach 1 : Splitting and Saving the String in a Reverse Manner

One of the easiest ways to reverse words in a string is by splitting the string and then saving it in reverse order. This is the naive approach. We will now look at the code for this method :

Java Implementation

In Java, we have the split method, which helps us split the string. We use it to split the string using the delimiter and reverse and store the line in another variable.

public class Scaler {
     public static void main(String[] args) {
        String input = "hello world";
        String s[] = input.split(" ");
        String res = "";
        for (int i = s.length - 1; i >= 0; i--) {
            res += s[i] + " ";
        }

        System.out.println(res.substring(0, res.length() - 1));
    }
}

Output :

world hello

Python Implementation

In python too, we have the split method, which helps us split the string. We use it to split the string using the delimiter and reverse and store the line in another variable.

s = "hello world"
words = s.split(' ')
res =[]
for word in words:
    res.insert(0, word)

print(" ".join(res))

Output :

world hello

C++ Implementation

#include <iostream>
using namespace std;

string reverseWords(string s) {
    string word = "";
    string res = "";
    for (char i: s) {
        if (i == ' ') {
            res = word + " " + res;
            word = "";
        } else {
            word += i;
        }
    }
    res = word + " " + res;
 return res.substr(0, res.size() - 1);
}

int main() {
	string input = "hello world";
	string res = reverseWords(input);
	cout << res;
	return 0;
}

Output :

world hello

Complexity Analysis

Let’s analyze the time and space complexity of this approach :

Time Complexity : O(n) as we use only one for a loop.
Space Complexity : O(n) as we are storing our output that is, the reversed string in a new variable.

Approach 2 : Using the Two-Pointers Approach

Now, here comes the optimal solution for this problem.

We initialize two pointers, one at the start of the string and another at the end. Then, we swap the words from the start and end, to achieve the reversed string.

Algorithm :

  1. Turn the string s into an array of strings in which the words of s are stored.
  2. Now, initialise the left and right pointers at 0 and s.length() – 1.
  3. Now, we need to swap the elements at the left and right pointers. For that, move the left pointer ahead and the right pointer backward by one position and swap the elements at each position while the left pointer does not exceed the right pointer.
  4. Return the final string.

Java Implementation

import java.util.*;

public class Scaler {

    public static String Reverse(String[] words) {
        int left = 0, right = words.length - 1;
        while (left <= right) {
            String temp = words[left];
            words[left] = words[right];
            words[right] = temp;
            left += 1;
            right -= 1;
        }
        String res = String.join(" ", words);
        return res;
    }

    public static void main(String[] args) {
        String s = "welcome reader";
        String[] words = s.split("\\s").trim();
        String res = Reverse(words);
        System.out.println(res);
    }
}

Output :

reader welcome

Python Implementation

s = "welcome reader"
s = s.split(" ")
left = 0
right = len(s) - 1
while left <= right:
    s[left], s[right] = s[right], s[left]
    left += 1
    right -= 1
res = " ".join(s)
print(res)

Output :

reader welcome

C++ Implementation

#include <iostream>
#include <vector>
using namespace std;

 string reverseWords(string s) {
  vector < string > words;
  string str = "";
  for (char c: s) {
    if (c == ' ') {
      words.push_back(str);
      str = "";
    } else {
      str += c;
    }
  }
  words.push_back(str);
  int left = 0, right = words.size() - 1;
  while (left <= right) {
    swap(words[left], words[right]);
    left++;
    right--;
  }
  string res = "";
  for (auto x: words) {
    res += x;
    res += " ";
  }
  res.pop_back();
  return res;
}

int main() {
	string input = "hello world";
	string res = reverseWords(input);
	cout << res;
	return 0;
}

Output :

world hello

Complexity Analysis

Let’s analyze the time and space complexity of this approach :

Time Complexity : O(n)
Space Complexity : O(1)

Conclusion

  • Reverse words in a string is a really important problem regarding interview preparation.
  • One of the easiest ways to solve this problem is by splitting the string and then saving it in reverse order.
  • Another way is to swap the words from the start and end to achieve the reversed string. This is also the optimal solution to the problem.

Author

The Valley is made up of 15 towns and villages, each with their own appeal. The Geneve Shopping Boulevard is ideally just a 3-minute walk away. You may have played up things to get them all especially riled up. But we are open about our practices and why euthanasia still happens. Lmfao: Your MCM pops bottles at the club but his steering wheel shakes aggressively when he picks up speed to merge onto the interstate Lmfao. Table 1 Summary information on seal deployments in the Southern Indian Ocean. This seminar can be attended in either April or July, giving online learners the chance to meet their faculty and peers and engage in face-to-face networking. These lists describes the basic or parent chemical and do not necessarily describe the salts, isomers and salts of isomers, esters, ethers and derivatives which may also be classified as controlled substances. If you have the time please shed any advice - it will be greatly appreciated. One of the series' most innovative additions to the genre is its countering system. Question 1a Alternately, are there EU grace periods for returning a phone and getting a refund? The delay property enables you to pause screen capturing for a specified duration of time. He leaves Letty in the middle of the night, off to go live his life one quarter-mile at a time.