String after processing backspace characters - GeeksforGeeks

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
 
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++
Java
Python3
C#
Javascript
// CPP implementation of above approach#include <bits/stdc++.h>using namespace std; // Function to find new final Stringstring 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 programint 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 implementation of above approachimport java.util.*;class GFG{ // Function to find new final Stringstatic 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 Codepublic 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 implementation of above approach # Function to find new final Stringdef 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 Codeif __name__ == "__main__":     S = "##geeks##for##geeks#"     # Function call to print    # required answer    print(newString(S))     # This code is contributed by Rituraj Jain
// C# implementation of above approachusing System.Collections.Generic;using System; class GFG{ // Function to find new final Stringstatic 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 Codepublic 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
<script>// Javascript implementation of above approach // Function to find new final Stringfunction 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 Codelet S = "##geeks##for##geeks#"; // function call to print// required answerdocument.write(newString(S)+"<br>"); // This code is contributed by rag2127</script>
geefgeek
 
Time Complexity: O(N), where N is the length of the String. 
prerna saini
rituraj_jain
29AjayKumar
rag2127
cpp-deque
cpp-strings
deque
Queue
Strings
cpp-strings
Strings
Queue
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Queue - Linked List Implementation
Circular Queue | Set 1 (Introduction and Array Implementation)
Sliding Window Maximum (Maximum of all subarrays of size k)
Implement Stack using Queues
Applications of Queue Data Structure
Reverse a string in Java
Write a program to reverse an array or string
Longest Common Subsequence | DP-4
Write a program to print all permutations of a given string
C++ Data Types