Table of Contents
Problem Statement
Reverse Words in a String III LeetCode Solution – We are given a string and are asked to reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.
Examples & Explanations
Example 1:
Input: s = "Let's take LeetCode contest" Output: "s'teL ekat edoCteeL tsetnoc" Exaplanation: Each word is reversed in the ouput while preserving whitespaces
Example 2:
Input: s = "God Ding" Output: "doG gniD" Explanation: reverse of God is doG & Ding is gniD
Approach
This problem can be used using simple implementation. We will use a loop to iterate over all the characters one by one. Let’s use a temporary string t to store the characters of a word. Keep appending or pushing back characters in t till we hit whitespace or reach the end of the given sentence. Reverse the characters in the string t and push it into the answer string “res” and empty string t.
The approach used in Java implementation differs because strings are a little difficult to handle as they are immutable in Java. So, instead of using a string, we will convert it into a char array and find the first and last index of each word present in the sentence and reverse it.
* Traverse the given string.
* Store the each character till you not counter an space
* For simplicity i have pushed an empty space at last.
* When you counter a space pass the string to function for reversing.
* Store the return string in my temporary variable.
* Storing it in a resulting string.
* Pushing an empty space at last of resulting to seprate the word.
* But NOT to add space at last word. For that i have if statement if((i+1)<s.length())
Code
C++ code for Reverse Words in a String III
class Solution { public: string reverseWords(string s) { string res="", t=""; int n = s.size(); for(int i=0; i<=n; i++) { if(i == n){ reverse(t.begin(), t.end()); res += t; } else if(s[i] == ' ' || i==n) { reverse(t.begin(), t.end()); res += t + " "; t=""; } else { t+=s[i]; } } return res; } };
Java code for Reverse Words in a String III
class Solution { public String reverseWords(String s) { int len = s.length(); if(len == 1) return s; int firstIndex, lastIndex; char[] res = s.toCharArray(); char temp; for(int index = 0 ; index < len ; index++){ firstIndex = index; while(++index < len && res[index] != ' '); lastIndex = index - 1; // reversing characters of the word while(firstIndex < lastIndex){ temp = res[firstIndex]; res[firstIndex++] = res[lastIndex]; res[lastIndex--] = temp; } } return new String(res); } }
Complexity Analysis for Reverse Words in a String III LeetCode Solution
- Time complexity: O(n), where n is the length of the string.
- Space complexity: O(n), res of size n is used.