1 minute read

Problem Statement

leetcode problem link

My Solution [Accepted]

public class Solution {
    public string RemoveStars(string s) {
        Stack<Char> stack = new Stack<Char>();
        foreach (var c in s) {
            if (c == '*' && stack.Count > 0) {
                stack.Pop();
            }
            else {
                stack.Push(c);
            }
        }

        return string.Join("", stack.Reverse());
    }
}

Improve Code

public class Solution
{
    public string RemoveStars(string s)
    {
        var stack = new Stack<char>();

        foreach (char c in s)
        {
            if (c == '*')
            {
                if (stack.Count > 0)
                    stack.Pop();
            }
            else
            {
                stack.Push(c);
            }
        }

        // stack is reversed, so build string in correct order
        var sb = new StringBuilder(stack.Count);
        foreach (char c in stack.Reverse())
            sb.Append(c);

        return sb.ToString();
    }
}

Editorial

Approach 1: Stack

class Solution:
    def removeStars(self, s):
        st = []
        for i in range(0, len(s)):
            if s[i] == '*':
                st.pop()
            else:
                st.append(s[i])

        return ''.join(st)

Approach 2: Strings

class Solution {
public:
    string removeStars(string s) {
        string answer = "";
        for (int i = 0; i < s.size(); i++) {
            if (s[i] == '*') {
                answer.pop_back();
            } else {
                answer.push_back(s[i]);
            }
        }
        return answer;
    }
};

Approach 3: Two Pointers

class Solution {
public:
    string removeStars(string s) {
        vector<char> ch(s.size());
        int j = 0;

        for (int i = 0; i < s.size(); i++) {
            if (s[i] == '*') {
                j--;
            } else {
                ch[j++] = s[i];
            }
        }

        string answer = "";
        for (int i = 0; i < j; i++) {
            answer.push_back(ch[i]);
        }

        return answer;
    }
};