Backspace String Compare using R | Fresco Play

Author: neptune | 05th-Nov-2023
#Hackerrank #Problem Solving

Problem Description: The problem asks us to determine whether two strings, `s1` and `s2`, are equal after applying backspace operations. Backspacing removes the previous character in the string, and we need to compare the final strings formed after backspacing.


Approach and Algorithm

To solve the problem, we can use a stack data structure to simulate the backspacing operation. The algorithm can be summarised as follows:


1. Initialize two empty stacks, `stack1` and `stack2`, to store the characters of `s1` and `s2` after backspacing.

2. Iterate through each character, `ch`, in `s1`:

   - If `ch` is not '#', push it onto `stack1`.

   - If `ch` is '#', check if `stack1` is not empty. If it is not empty, pop the top element from `stack1` (backspace operation).

3. Iterate through each character, `ch`, in `s2`, and apply the same steps as in step 2 for `stack2`.

4. After iterating through both strings, compare the contents of `stack1` and `stack2`. If they are equal, return 1. Otherwise, return 0.


Pseudocode

Here's the pseudocode for the algorithm:


compareStrings(s1, s2):

    stack1 = empty stack

    stack2 = empty stack


    # Iterate through s1

    for ch in s1:

        if ch != '#':

            push ch onto stack1

        else:

            if stack1 is not empty:

                pop the top element from stack1


    # Iterate through s2

    for ch in s2:

        if ch != '#':

            push ch onto stack2

        else:

            if stack2 is not empty:

                pop the top element from stack2


    # Compare the stacks

    if stack1 is equal to stack2:

        return 1

    else:

        return 0



Implementation in R


compareStrings <- function(s1, s2) {

    stack1 <- list()

    stack2 <- list()


    # Iterate through s1

    for (ch in strsplit(s1, "")[[1]]) {

        if (ch != "#") {

            stack1 <- c(stack1, ch)

        } else {

            if (length(stack1) > 0) {

                stack1 <- stack1[-length(stack1)]

            }

        }

    }


    # Iterate through s2

    for (ch in strsplit(s2, "")[[1]]) {

        if (ch != "#") {

            stack2 <- c(stack2, ch)

        } else {

            if (length(stack2) > 0) {

                stack2 <- stack2[-length(stack2)]

            }

        }

    }


    # Compare the stacks

    if (identical(stack1, stack2)) {

        return(1)

    } else {

        return(0)

    }

}



Implementation in Python


def compareStrings(s1, s2):

    stack1 = []

    stack2 = []


    # Iterate through s1

    for ch in s1:

        if ch != '#':

            stack1.append(ch)

        else:

            if stack1:

                stack1.pop()


    # Iterate through s2

    for ch in s2:

        if ch != '#':

            stack2.append(ch)

        else:

            if stack2:

                stack2.pop()


    # Compare the stacks

    if stack1 == stack2:

        return 1

    else:

        return 0



Complexity Analysis

The time complexity of this solution is O(n), where n is the length of the longer string between `s1` and `s2`. This is because we iterate through both strings once. The space complexity is also O(n) since the worst-case scenario is when no backspaces occur, and we need to store all the characters in the stacks.

Testing

You can test the function with the provided sample inputs test cases to validate its correctness.



# Sample test cases

s1 <- "axx#bb#c"

s2 <- "axbd#c#c"

output <- compareStrings(s1, s2)

print(output)  # Output: 1


s1 <- "yf#c#"

s2 <- "yy#k#pp##"

output <- compareStrings(s1, s2)

print(output)  # Output: 1


s1 <- "hacc#kk#"

s2 <- "hb##ackk##"

output <- compareStrings(s1, s2)

print(output)  # Output: 0



The function should produce the expected output for each test case, demonstrating the correctness of the solution.

Conclusion

In this article, we discussed how to solve the "Backspace String Compare" problem using R. By simulating the backspacing operation using stacks, we can compare the final strings formed after applying backspaces. The provided algorithm and implementation offer an efficient solution to the problem.




Related Blogs
5. Solution of Hacker Rank Weather Observation Station 8.
Author: neptune | 18th-Aug-2024
#SQL #Hackerrank
Query the list of CITY names from STATION which have vowels (i.e., a, e, i, o, and u) as both their first and last characters. Your result cannot contain duplicates...

The Blunder | Hackerrank
Author: neptune | 21st-Nov-2022
#SQL #Hackerrank
Write a query calculating the amount of error (i.e.: average monthly salaries), and round it up to the next integer...

7.Solution of Hacker Rank The Report
Author: neptune | 23rd-Jan-2023
#SQL #Hackerrank
Problem Statement : generate a report containing three columns: Name, Grade and Mark. Ketty doesn't want the NAMES of those students who received a grade lower than 8...

4. Solution of Hacker Rank Weather Observation Station 6.
Author: neptune | 23rd-Jan-2023
#SQL #Hackerrank
Query the list of CITY names starting with vowels (i.e., a, e, i, o, or u) from STATION. Your result cannot contain duplicates...

Identifying the Odd One Out in a Series of Strings | Hackerrank
Author: neptune | 15th-Jun-2023
#Hackerrank #Problem Solving
The article presents an algorithm to identify the odd one out in a series of strings efficiently...

3. Solution of Hacker Rank Weather Observation Station 4.
Author: neptune | 23rd-Jan-2023
#SQL #Hackerrank
Problem Statement : Find the difference between the total number of CITY entries in the table and the number of distinct CITY entries in the table...

The PADS | Hackerrank
Author: neptune | 21st-Nov-2022
#SQL #Hackerrank
Problem Statement: Generate the following two result sets: 1. Query an alphabetically ordered list of all names in OCCUPATIONS, immediately followed by the first letter of each profession...

6. Solution of Hacker Rank Employee Salaries.
Author: neptune | 23rd-Jan-2023
#SQL #Hackerrank
Problem Statement : Query that prints a list of employee names for employees in Employee having a salary greater than $2000 per month and experience less than 10 months...

1. Basic SQL Select Query of Hacker Rank.
Author: neptune | 20th-Apr-2022
#SQL #Hackerrank
Problem Statement : Query all columns for all American cities in the CITY table with populations larger than 100000. The CountryCode for America is USA...

Generate Fibonacci Sequence - JavaScript | Hackerank
Author: neptune | 07th-Apr-2023
#JavaScript #Hackerrank
Write a JavaScript function fibonacciSequence() to generate a FIbonacci sequence...

2. Solution of Hacker Rank Weather Observation Station 3.
Author: neptune | 23rd-Jan-2023
#SQL #Hackerrank
Problem Statement : Query a list of CITY names from STATION for cities that have an even ID number. Print the results in any order, but exclude duplicates from the answer...

Team Formation Hackerrank | Julia
Author: neptune | 13th-Apr-2023
#Hackerrank
HackerRank is organising a chess tournament for its employees. There are n employees, having IDs 1, 2, n, where the employee has a rating of rating...

Modified 0-1 knapsack problem | Frsco Play Hackerrank
Author: neptune | 05th-Nov-2023
#Hackerrank #Problem Solving
An automobile mechanic wants to buy a set of spare parts from a manufacturing unit. Goal is to maximise the amount of money the mechanic can earn...

Weather Observation Station 18 | Hackerrank
Author: neptune | 18th-Apr-2023
#SQL #Hackerrank
In this problem, we need to find the Manhattan Distance between two points P1(a,b) and P2(c,d)...

Solving the Ice Cream Parlor Problem | Hackerrank
Author: neptune | 04th-Jun-2023
#Hackerrank #Problem Solving
Two friends like to pool their money and go to the ice cream parlour. They always choose two distinct flavours and they spend all of their money...

AngularJS - Know Tech Frameworks | Fresco Play
Author: neptune | 05th-Nov-2023
#Hackerrank #Problem Solving
Build an application that displays the framework details using AngularJS routing. We will build an application that displays the Tech Frontend and Backend frameworks...

Top Earners | HackerRank
Author: neptune | 23rd-Nov-2022
#SQL #Hackerrank
Write a query to find the maximum total earnings for all employees as well as the total number of employees who have maximum total earnings...

Git - Recovering Discarded Changes
Author: neptune | 13th-Jul-2023
#Github #Problem Solving
We will follow a scenario where a developer is working on a web application and needs to recover a discarded commit to reintroduce a specific feature...

PySpark Milestone Black Friday Sales Data | Fresco Play Hackerrank
Author: neptune | 05th-Nov-2023
#Data Science #Hackerrank
Welcome to the Spark Challenge. You are provided with the Black Friday sales data and we as a big data developer needs to analyze and fetch the required data...

Python - Number Based Problem | Hackerrank
Author: neptune | 17th-Aug-2023
#Hackerrank #Problem Solving
Determine whether the number in descending order is a prime or not. If the number is a prime, then print "Sorted Number is a prime number," otherwise, print "Sorted Number is not a prime number."..

View More