2390.Removing Stars From a String === ###### tags: `Medium`,`String`,`Stack` [2390. Removing Stars From a String](https://leetcode.com/problems/removing-stars-from-a-string/) ### 題目描述 You are given a string `s`, which contains stars `*`. In one operation, you can: * Choose a star in `s`. * Remove the closest **non-star** character to its **left**, as well as remove the star itself. Return *the string after **all** stars have been removed.* **Note:** * The input will be generated such that the operation is always possible. * It can be shown that the resulting string will always be unique. ### 範例 **Example 1:** ``` Input: s = "leet**cod*e" Output: "lecoe" Explanation: Performing the removals from left to right: - The closest character to the 1st star is 't' in "leet**cod*e". s becomes "lee*cod*e". - The closest character to the 2nd star is 'e' in "lee*cod*e". s becomes "lecod*e". - The closest character to the 3rd star is 'd' in "lecod*e". s becomes "lecoe". There are no more stars, so we return "lecoe". ``` **Example 2:** ``` Input: s = "erase*****" Output: "" Explanation: The entire string is removed, so we return an empty string. ``` **Constraints**: * 1 <= `s.length` <= 10^5^ * `s` consists of lowercase English letters and stars `*`. * The operation above can be performed on `s`. ### 解答 #### Python ```python= class Solution: def removeStars(self, s: str) -> str: stack = [] for ch in s: if ch != '*': stack.append(ch) else: stack.pop() return "".join(stack) ``` > [name=Ron Chen][time=Tue, Apr 11, 2023] ```python= class Solution: def removeStars(self, s: str) -> str: new_s = [] for i in range(s): if i != '*': new_s.append(i) else: new_s.pop() ret = ''.join(new_s) return ret ``` > [name=gp][time=Tue, Apr 11, 2023] #### Javascript ```javascript= function removeStars(s) { const stack = []; for (const c of s) { if (c !== '*') { stack.push(c); } else { stack.pop(); } } return stack.join(''); } ``` > [name=Marsgoat][time=Tue, Apr 11, 2023] #### C# ```csharp= public string RemoveStars(string s) { char[] output = new char[s.Length]; int len = 0; for (int i = 0; i < s.Length; i++) { output[len] = s[i]; len = s[i] switch { '*' => len - 1, _ => len + 1 }; } return string.Concat(output.Take(len)); } ``` > [name=Jim][time=Wed, Apr 12, 2023] ### Reference [回到題目列表](https://hackmd.io/@Marsgoat/leetcode_every_day)