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.