g2301_2400.s2390_removing_stars_from_a_string.Solution Maven / Gradle / Ivy
package g2301_2400.s2390_removing_stars_from_a_string;
// #Medium #String #Stack #Simulation #2022_09_02_Time_31_ms_(90.55%)_Space_62.6_MB_(76.40%)
/**
* 2390 - Removing Stars From a String\.
*
* Medium
*
* 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 "lee**t**\*\*cod\*e". s becomes "lee\*cod\*e".
*
* - The closest character to the 2nd star is 'e' in "le**e**\*cod\*e". s becomes "lecod\*e".
*
* - The closest character to the 3rd star is 'd' in "leco**d**\*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 <= 105
* * `s` consists of lowercase English letters and stars `*`.
* * The operation above can be performed on `s`.
**/
public class Solution {
public String removeStars(String s) {
StringBuilder sb = new StringBuilder();
int stars = 0;
for (int i = s.length() - 1; i >= 0; --i) {
if (s.charAt(i) == '*') {
++stars;
} else if (stars > 0) {
--stars;
} else {
sb.append(s.charAt(i));
}
}
return sb.reverse().toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy