String después de procesar los caracteres de retroceso

Dada una string S que contiene letras y ‘ # ‘. El ‘ # ” representa un retroceso . La tarea es imprimir la nueva string sin ‘ # ‘.
Ejemplos: 
 

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

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

Enfoque: un enfoque simple para este problema mediante el uso de deque es el siguiente:
 

  • Recorre la cuerda S.
  • Si se encuentra cualquier caracter excepto ‘#’ empújelo hacia atrás en deque.
  • si se encuentra el carácter ‘#’, extraiga un carácter de la parte posterior de deque.
  • Finalmente, haga estallar todos los elementos desde el frente de deque para hacer una nueva string.

A continuación se muestra la implementación del enfoque anterior: 
 

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>
Producción: 

geefgeek

 

Complejidad de tiempo: O(N), donde N es la longitud de la string.

Complejidad espacial : O (N) desde que se usa auxiliar deque
 

Publicación traducida automáticamente

Artículo escrito por Sanjit_Prasad y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *