Find the resultant String after replacing X with Y and removing Z

Given a string str, the task is to replace all occurrences of the given X with given Y and also remove any occurrances 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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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
            // insted 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 
                // insted 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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
            # insted 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 
                // insted 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

chevron_right



Output :

ndtmd


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : AnkitRai01, princiraj1992