Skip to content
Related Articles

Related Articles

Improve Article
Find the resultant String after replacing X with Y and removing Z
  • Last Updated : 19 May, 2021

Given a string str, the task is to replace all occurrences of the given X with given Y and also remove any occurrences of the given Z if present in it with no extra space 
Examples: 
 

Input: str = “batman”, X = ‘a’, Y = ‘d’, Z = ‘b’ 
Output: ntdmd
Input: str = “abba”, X = ‘a’, Y = ‘d’, Z = ‘b’ 
Output: dd 
 

Recommended: Please try your approach on {IDE} first, before moving on to the solution.
Approach: 
 

  • The idea is based on the 2 pointers.
  • Let two-variable start and end points to the beginning and end of the string.
  • Now if the character at the start is Z, replace it with a character not having Y at another pointer pointing to a location > start keeping in mind to replace character X with Y if found.

Below is the implementation of the above approach: 
 

C++




// C++ program to find the resultant String
// after replacing X with Y and removing Z
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to replace and remove
void replaceRemove(string& s, char X, char Y, char Z)
{
 
    // Two pointer start and end points
    // to beginning and end position in the string
    int start = 0, end = s.size() - 1;
 
    while (start <= end) {
 
        // If start is having Z
        // find X pos in end and
        // replace Z with another character
        if (s[start] == Z) {
 
            // Find location for having
            // different character
            // instead of Z
            while (end >= 0 && s[end] == Z) {
                end--;
            }
 
            // If found swap character
            // at start and end
            if (end > start) {
                swap(s[start], s[end]);
                if (s[start] == X)
                    s[start] = Y;
                start++;
            }
        }
        // Else increment start
        // Also checkin for X
        // at start position
        else {
            if (s[start] == X)
                s[start] = Y;
            start++;
        }
    }
    while (s.size() > 0 && s[s.size() - 1] == Z) {
        s.pop_back();
    }
}
 
// Driver code
int main()
{
 
    string str = "batman";
    char X = 'a', Y = 'd', Z = 'b';
 
    replaceRemove(str, X, Y, Z);
 
    if (str.size() == 0) {
        cout << -1;
    }
    else {
        cout << str;
    }
 
    return 0;
}

Java




// Java program to find the resultant String
// after replacing X with Y and removing Z
class GFG
{
     
    // Function to replace and remove
    static String replaceRemove(char []s, char X,
                                   char Y, char Z)
    {
     
        // Two pointer start and end points
        // to beginning and end position in the string
        int start = 0, end = s.length - 1;
     
        while (start <= end)
        {
     
            // If start is having Z
            // find X pos in end and
            // replace Z with another character
            if (s[start] == Z)
            {
     
                // Find location for having
                // different character
                // instead of Z
                while (end >= 0 && s[end] == Z)
                {
                    end--;
                }
     
                char temp ;
                 
                // If found swap character
                // at start and end
                if (end > start)
                {
                    temp = s[start];
                    s[start] = s[end];
                    s[end] = temp;
                     
                    if (s[start] == X)
                        s[start] = Y;
                    start++;
                }
            }
             
            // Else increment start
            // Also checkin for X
            // at start position
            else
            {
                if (s[start] == X)
                    s[start] = Y;
                start++;
            }
        }
         
        String new_s = new String(s);
        while (new_s.length() > 0 &&
            new_s.charAt(new_s.length() - 1) == Z)
        {
            new_s = new_s.substring(0,new_s.length() - 1);
        }
        return new_s;
    }
     
    // Driver code
    public static void main (String[] args)
    {
     
        String str = "batman";
        char X = 'a', Y = 'd', Z = 'b';
     
        str = replaceRemove(str.toCharArray() , X, Y, Z);
     
        if (str.length() == 0)
        {
            System.out.println(-1);
        }
        else
        {
            System.out.println(str);
        }
    }
}
 
// This code is contributed by AnkitRai01

Python3




# Python3 program to find the resultant String
# after replacing X with Y and removing Z
 
# Function to replace and remove
def replaceRemove(s, X, Y, Z) :
 
    s = list(s);
     
    # Two pointer start and end points
    # to beginning and end position in the string
    start = 0;
    end = len(s) - 1;
     
    while (start <= end) :
         
        # If start is having Z
        # find X pos in end and
        # replace Z with another character
        if (s[start] == Z) :
             
            # Find location for having
            # different character
            # instead of Z
            while (end >= 0 and s[end] == Z) :
                end -= 1;
                 
            # If found swap character
            # at start and end
            if (end > start) :
                s[start], s[end] = s[end], s[start]
                if (s[start] == X):
                    s[start] = Y;
                     
                start += 1
                 
        # Else increment start
        # Also checkin for X
        # at start position
        else :
            if (s[start] == X) :
                s[start] = Y;
                 
            start += 1;
             
    while (len(s) > 0 and s[len(s) - 1] == Z):
        s.pop();
         
    return "".join(s)
 
# Driver code
if __name__ == "__main__" :
 
    string = "batman";
    X = 'a'; Y = 'd'; Z = 'b';
 
    string = replaceRemove(string, X, Y, Z);
 
    if (len(string) == 0) :
        print(-1);
 
    else :
        print(string);
 
# This code is contributed by AnkitRai01

C#




// C# program to find the resultant String
// after replacing X with Y and removing Z
using System;
 
class GFG
{
     
    // Function to replace and remove
    static String replaceRemove(char []s, char X,
                                char Y, char Z)
    {
     
        // Two pointer start and end points
        // to beginning and end position in the string
        int start = 0, end = s.Length - 1;
     
        while (start <= end)
        {
     
            // If start is having Z
            // find X pos in end and
            // replace Z with another character
            if (s[start] == Z)
            {
     
                // Find location for having
                // different character
                // instead of Z
                while (end >= 0 && s[end] == Z)
                {
                    end--;
                }
     
                char temp ;
                 
                // If found swap character
                // at start and end
                if (end > start)
                {
                    temp = s[start];
                    s[start] = s[end];
                    s[end] = temp;
                     
                    if (s[start] == X)
                        s[start] = Y;
                    start++;
                }
            }
             
            // Else increment start
            // Also checkin for X
            // at start position
            else
            {
                if (s[start] == X)
                    s[start] = Y;
                start++;
            }
        }
         
        String new_s = new String(s);
        while (new_s.Length > 0 &&
               new_s[new_s.Length - 1] == Z)
        {
            new_s = new_s.Substring(0,new_s.Length - 1);
        }
        return new_s;
    }
     
    // Driver code
    public static void Main(String[] args)
    {
     
        String str = "batman";
        char X = 'a', Y = 'd', Z = 'b';
     
        str = replaceRemove(str.ToCharArray() , X, Y, Z);
     
        if (str.Length == 0)
        {
            Console.WriteLine(-1);
        }
        else
        {
            Console.WriteLine(str);
        }
    }
}
 
// This code is contributed by PrinciRaj1992

Output : 
 



ndtmd

 

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.

In case you wish to attend live classes with industry experts, please refer Geeks Classes Live 




My Personal Notes arrow_drop_up
Recommended Articles
Page :