Reverse an array without affecting special characters - GeeksforGeeks
Given a string, that contains special character together with alphabets ('a' to 'z' and 'A' to 'Z'), reverse the string in a way that special characters are not affected.
Read full article from Reverse an array without affecting special characters - GeeksforGeeks
Given a string, that contains special character together with alphabets ('a' to 'z' and 'A' to 'Z'), reverse the string in a way that special characters are not affected.
Input: str = "a,b$c" Output: str = "c,b$a" Note that $ and , are not moved anywhere. Only subsequence "abc" is reversed
Simple Solution:
1) Create a temporary character array say temp[].
2) Copy alphabetic characters from 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 alphabetic character is input string, replace it with current character of temp[].
1) Create a temporary character array say temp[].
2) Copy alphabetic characters from 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 alphabetic character is input string, replace it with current character of temp[].
Efficient Solution:
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]
void reverse(char str[]){ // Initialize left and right pointers int r = strlen(str) - 1, l = 0; // Traverse string from both ends until // 'l' and 'r' while (l < r) { // Ignore special characters if (!isAlphabet(str[l])) l++; else if(!isAlphabet(str[r])) r--; else // Both str[l] and str[r] are not spacial { swap(str[l], str[r]); l++; r--; } }}