# Solving Leetcode Interviews in Seconds with AI: Lexicographically Minimum String After Removing Stars


	# Introduction
	In this blog post, we will explore how to solve the LeetCode problem "3170" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like [Chatmagic](https://www.chatmagic.app), we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

	# Problem Statement
	> You are given a string s. It may contain any number of '*' characters. Your task is to remove all '*' characters. While there is a '*', do the following operation:  Delete the leftmost '*' and the smallest non-'*' character to its left. If there are several smallest characters, you can delete any of them.  Return the lexicographically smallest resulting string after removing all '*' characters.   Example 1:  Input: s = "aaba*" Output: "aab" Explanation: We should delete one of the 'a' characters with '*'. If we choose s[3], s becomes the lexicographically smallest.  Example 2:  Input: s = "abc" Output: "abc" Explanation: There is no '*' in the string.    Constraints:  1 <= s.length <= 105 s consists only of lowercase English letters and '*'. The input is generated such that it is possible to delete all '*' characters.  

	# Explanation
	Here's the breakdown of the solution:

*   **Iterate Backwards:** Process the string from right to left. This allows efficient identification of characters to keep.
*   **Stack for Non-Star Characters:** Use a stack to maintain the characters that will be part of the final result, ensuring the lexicographically smallest order.
*   **Conditional Popping from Stack:** When encountering a '*', pop characters from the stack that are smaller than or equal to the current character available for deletion to the left of the '*'.

*   **Runtime Complexity:** O(n), where n is the length of the string.
*   **Storage Complexity:** O(n)

	
	# Code
	```python
	def remove_stars(s: str) -> str:
    """
    Removes '*' characters from the string s and returns the lexicographically smallest resulting string.
    """

    stack = []
    for char in reversed(s):
        if char == '*':
            continue
        else:
            stack.append(char)
            while len(stack) > 1 and stack[-2] == '*':
                star_index = len(stack) - 2
                curr_char = stack[-1]
                
                # Find the smallest character that can be deleted before star
                smallest_to_left = curr_char # Initialize it to current character, in case the stack doesn't have anything to the left of the '*'
                
                #Delete the leftmost '*' and the smallest non-'*' character to its left.
                stack.pop()
                stack.pop(star_index)
    return "".join(reversed(stack))
	```
			
