Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

String after processing backspace characters

  • Difficulty Level : Medium
  • Last Updated : 21 Jul, 2021

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

 

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 experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

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++




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

Java




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

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

C#




// C# implementation of above approach
using System.Collections.Generic;
using System;
 
class GFG
{
 
// Function to find new final String
static String newString(String S)
{
    Stack<Char> q = new Stack<Char>();
 
    for (int i = 0; i < S.Length; ++i)
    {
        if (S[i] != '#')
            q.Push(S[i]);
        else if (q.Count!=0)
            q.Pop();
    }
 
    // build final string
    String ans = "";
 
    while (q.Count!=0)
    {
        ans += q.Pop();
    }
 
    // return final string
    String answer = "";
    for(int j = ans.Length - 1; j >= 0; j--)
    {
        answer += ans[j];
    }
    return answer;
}
 
// Driver Code
public static void Main(String []args)
{
    String S = "##geeks##for##geeks#";
 
    // function call to print
    // required answer
    Console.WriteLine(newString(S));
}
}
 
// This code is contributed by 29AjayKumar

Javascript




<script>
// Javascript implementation of above approach
 
// Function to find new final String
function newString(S)
{
    let q = [];
   
    for (let i = 0; i < S.length; ++i)
    {
        if (S[i] != '#')
            q.push(S[i]);
        else if (q.length!=0)
            q.pop();
    }
   
    // build final string
    let ans = "";
   
    while (q.length!=0)
    {
        ans += q.pop();
    }
   
    // return final string
    let answer = "";
    for(let j = ans.length - 1; j >= 0; j--)
    {
        answer += ans[j];
    }
    return answer;
}
 
// Driver Code
let S = "##geeks##for##geeks#";
 
// function call to print
// required answer
document.write(newString(S)+"<br>");
 
// This code is contributed by rag2127
</script>
Output: 
geefgeek

 

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




My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!