String after processing backspace characters

Given a string S containing letters and ‘#‘. The ‘#” represents a backspace. The task is to print the new string without ‘#‘.

Examples:

Input : S = "abc#de#f#ghi#jklmn#op#"
Output : abdghjklmo

Input : S = "##geeks##for##geeks#"
Output : geefgeek

Approach: A simple approach to this problem by using deque is as follows:



  • Traverse the string S.
  • If any character except ‘#’ is found push it at back in deque.
  • if the character ‘#’ is found pop a character from back of deque.
  • Finally pop all elements from front of deque to make new string.
  • Below is the implementation of above approach:

    C++

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // CPP implementation of above approach
    #include <bits/stdc++.h>
    using namespace std;
      
    // Function to find new final String
    string newString(string S)
    {
        deque<char> q;
      
        for (int i = 0; i < S.length(); ++i) {
      
            if (S[i] != '#')
                q.push_back(S[i]);
            else if (!q.empty())
                q.pop_back();
        }
      
        // build final string
        string ans = "";
      
        while (!q.empty()) {
            ans += q.front();
            q.pop_front();
        }
      
        // return final string
        return ans;
    }
      
    // Driver program
    int main()
    {
        string S = "##geeks##for##geeks#";
      
        // function call to print required answer
        cout << newString(S);
      
        return 0;
    }
      
    // This code is contributed by Sanjit_Prasad

    chevron_right

    
    

    Java

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Java implementation of above approach 
    import java.util.*;
    class GFG 
    {
      
    // Function to find new final String 
    static String newString(String S) 
        Stack<Character> q = new Stack<Character>(); 
      
        for (int i = 0; i < S.length(); ++i) 
        
            if (S.charAt(i) != '#'
                q.push(S.charAt(i)); 
            else if (!q.isEmpty()) 
                q.pop(); 
        
      
        // build final string 
        String ans = ""
      
        while (!q.isEmpty())
        
            ans += q.pop(); 
        
      
        // return final string 
        String answer = "";
        for(int j = ans.length() - 1; j >= 0; j--)
        {
            answer += ans.charAt(j);
        }
        return answer; 
      
    // Driver Code 
    public static void main(String[] args) 
        String S = "##geeks##for##geeks#"
      
        // function call to print 
        // required answer 
        System.out.println(newString(S)); 
    }
      
    // This code is contributed
    // by prerna saini

    chevron_right

    
    

    Python3

    # Python3 implementation of above approach

    # Function to find new final String
    def newString(S):

    q = []



    for i in range(0, len(S)):

    if S[i] != ‘#’:
    q.append(S[i])
    elif len(q) != 0:
    q.pop()

    # Build final string
    ans = “”

    while len(q) != 0:
    ans += q[0]
    q.pop(0)

    # return final string
    return ans

    # Driver Code
    if __name__ == “__main__”:

    S = “##geeks##for##geeks#”

    # Function call to print
    # required answer
    print(newString(S))

    # This code is contributed by Rituraj Jain

    Output:

    geefgeek
    

    Time Complexity: O(N), where N is the length of the String.



    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 : prerna saini, rituraj_jain