Given a string, that contains a special character together with alphabets (‘a’ to ‘z’ and ‘A’ to ‘Z’), reverse the string in a way that special characters are not affected. Examples:
Input: str = "a,b$c"
Output: str = "c,b$a"
Note that $ and , are not moved anywhere.
Only subsequence "abc" is reversed
Input: str = "Ab,c,de!$"
Output: str = "ed,c,bA!$"
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more, please refer Complete Interview Preparation Course.
Simple Solution: 1) Create a temporary character array say temp. 2) Copy alphabetic characters from the given array to temp. 3) Reverse temp using standard string reversal algorithm. 4) Now traverse input string and temp in a single loop. Wherever there is an alphabetic character is input string, replace it with the current character of temp. Efficient Solution: Time complexity of the above solution is O(n), but it requires extra space, and it does two traversals of an input string. We can reverse with one traversal and without extra space. Below is the algorithm.
1) Let input string be 'str' and length of string be 'n'
2) l = 0, r = n-1
3) While l is smaller than r, do following
a) If str[l] is not an alphabetic character, do l++
b) Else If str[r] is not an alphabetic character, do r--
c) Else swap str[l] and str[r]