Given a string str and two characters X and Y, the task is to write a recursive function to replace all occurrences of character X with character Y.
Examples:
Input: str = abacd, X = a, Y = x
Output: xbxcdInput: str = abacd, X = e, Y = y
Output: abacd
Iterative Approach: The idea is to iterate over the given string and if any character X is found then replace that character with Y.
Code-
// C++ program for the above approach #include <bits/stdc++.h> using namespace std;
// Function to replace all occurrences // of character c1 with character c2 void replaceCharacter( char * str, char c1, char c2)
{ int j, n = strlen (str);
for ( int i = j = 0; i < n; i++) {
if (str[i] != c1) {
str[j++] = str[i];
}
else {
str[j++] = c2;
}
}
str[j] = '\0' ;
} // Driver Code int main()
{ // Given string
char str[] = "abacd" ;
char c1 = 'a' ;
char c2 = 'x' ;
// Function call
replaceCharacter(str, c1, c2);
// Print the string
cout << str;
return 0;
} |
public class Main {
// Function to replace all occurrences
// of character c1 with character c2
static void replaceCharacter( char [] str, char c1, char c2) {
int j = 0 ;
int n = str.length;
for ( int i = 0 ; i < n; i++) {
if (str[i] != c1) {
str[j++] = str[i];
} else {
str[j++] = c2;
}
}
}
public static void main(String[] args) {
// Given string
char [] str = "abacd" .toCharArray();
char c1 = 'a' ;
char c2 = 'x' ;
// Function call
replaceCharacter(str, c1, c2);
// Print the string
System.out.println(str);
}
} |
# Function to replace all occurrences # of character c1 with character c2 def replaceCharacter( str , c1, c2):
n = len ( str )
res = ""
for i in range (n):
if str [i] ! = c1:
res + = str [i]
else :
res + = c2
return res
# Driver Code if __name__ = = '__main__' :
# Given string
str = "abacd"
c1 = 'a'
c2 = 'x'
# Function call
str = replaceCharacter( str , c1, c2)
# Print the string
print ( str )
|
using System;
public class MainClass
{ // Function to replace all occurrences
// of character c1 with character c2
static void ReplaceCharacter( char [] str, char c1, char c2)
{
int j = 0;
int n = str.Length;
for ( int i = 0; i < n; i++)
{
if (str[i] != c1)
{
str[j++] = str[i];
}
else
{
str[j++] = c2;
}
}
}
public static void Main( string [] args)
{
// Given string
char [] str = "abacd" .ToCharArray();
char c1 = 'a' ;
char c2 = 'x' ;
// Function call
ReplaceCharacter(str, c1, c2);
// Print the string
Console.WriteLine(str);
}
} |
// Function to replace all occurrences // of character c1 with character c2 function replaceCharacter(str, c1, c2) {
let result = "" ;
for (let i = 0; i < str.length; i++) {
if (str[i] != c1) {
result += str[i];
} else {
result += c2;
}
}
return result;
} // Given string let str = "abacd" ;
let c1 = 'a' ;
let c2 = 'x' ;
// Function call let newStr = replaceCharacter(str, c1, c2); // Print the string console.log(newStr); |
Output-
xbxcd
Time Complexity: O(N), as we are using a loop to traverse N times so it will cost us O(N) time.
Auxiliary Space: O(1), as we are not using any extra space.
Recursive Approach: The idea is to recursively traverse the given string and replace the character with value X with Y. Below are the steps:
- Get the string str, character X, and Y.
- Recursively Iterate from index 0 to string length.
-
Base Case: If we reach the end of the string the exit from the function.
-
Base Case: If we reach the end of the string the exit from the function.
if(str[0]=='\0') return ;
-
Recursive Call: If the base case is not met, then check for the character at 0th index if it is X then replace that character with Y and recursively iterate for next character.
if(str[0]==X) str[0] = Y
-
Return Statement: At each recursive call(except the base case), return the recursive function for the next iteration.
return recursive_function(str + 1, X, Y)
Below is the recursive implementation:
// C++ program for the above approach #include <bits/stdc++.h> using namespace std;
// Function to replace all occurrences // of character c1 with character c2 void replaceCharacter( char input[],
char c1, char c2)
{ // Base Case
// If the string is empty
if (input[0] == '\0' ) {
return ;
}
// If the character at starting
// of the given string is equal
// to c1, replace it with c2
if (input[0] == c1) {
input[0] = c2;
}
// Getting the answer from recursion
// for the smaller problem
return replaceCharacter(input + 1,
c1, c2);
} // Driver Code int main()
{ // Given string
char str[] = "abacd" ;
char c1 = 'a' ;
char c2 = 'x' ;
// Function call
replaceCharacter(str, c1, c2);
// Print the string
cout << str;
return 0;
} |
// Java program for the above approach import java.util.*;
import java.io.*;
class GFG{
// Function to replace all occurrences // of character c1 with character c2 static String replaceCharacter(String str,
char c1, char c2)
{ // Base Case
// If the string is empty
if (str.length() == 1 )
{
return str;
}
char x=str.charAt( 0 );
// If the character at starting
// of the given string is equal
// to c1, replace it with c2
if (str.charAt( 0 ) == c1)
{
x=c2;
str = c2+str.substring( 1 );
}
// Getting the answer from recursion
// for the smaller problem
return x+replaceCharacter(str.substring( 1 ),
c1, c2);
} // Driver Code public static void main(String[] args)
{ // Given string
String str = "abacd" ;
char c1 = 'a' ;
char c2 = 'x' ;
// Function call
System.out.println(replaceCharacter(str, c1, c2));
} } // This code is contributed by cyrus18 |
# Python3 program for the above approach # Function to replace all occurrences # of character c1 with character c2 def replaceCharacter( input , c1, c2):
input = list ( str )
# If the character at starting
# of the given string is equal
# to c1, replace it with c2
for i in range ( 0 , len ( str )):
if ( input [i] = = c1):
input [i] = c2;
# Print the string
print ( input [i], end = "")
# Driver Code # Given string str = "abacd"
c1 = 'a'
c2 = 'x'
# Function call replaceCharacter( str , c1, c2);
# This code is contributed by sanjoy_62 |
// C# program for the above approach using System;
class GFG{
// Function to replace all occurrences // of character c1 with character c2 static void replaceCharacter( string str,
char c1, char c2)
{ char [] input = str.ToCharArray();
// If the character at starting
// of the given string is equal
// to c1, replace it with c2
for ( int i = 0; i < str.Length; i++)
{
if (input[i] == c1)
{
input[i] = c2;
}
// Print the string
Console.Write(input[i]);
}
} // Driver Code public static void Main()
{ // Given string
string str = "abacd" ;
char c1 = 'a' ;
char c2 = 'x' ;
// Function call
replaceCharacter(str, c1, c2);
} } // This code is contributed by sanjoy_62 |
<script> // javascript program for the above approach // Function to replace all occurrences // of character c1 with character c2 function replaceCharacter(str,c1, c2)
{ // Base Case
// If the string is empty
if (str.length == 1)
{
return str;
}
var x=str.charAt(0);
// If the character at starting
// of the given string is equal
// to c1, replace it with c2
if (str.charAt(0) == c1)
{
x=c2;
str = c2+str.substring(1);
}
// Getting the answer from recursion
// for the smaller problem
return x+replaceCharacter(str.substring(1),
c1, c2);
} // Driver Code //Given string var str = "abacd" ;
var c1 = 'a' ;
var c2 = 'x' ;
// Function call document.write(replaceCharacter(str, c1, c2)); // This code is contributed by 29AjayKumar </script> |
xbxcd
Time Complexity: O(N), as we are using a loop to traverse N times so it will cost us O(N) time, where N is the length of the string.
Auxiliary Space: O(N), due to recursive stack space.