2390. Removing Stars From a String
/*
* @lc app=leetcode id=2390 lang=cpp
*
* [2390] Removing Stars From a String
*
* https://leetcode.com/problems/removing-stars-from-a-string/description/
*
* algorithms
* Medium (76.60%)
* Likes: 3086
* Dislikes: 224
* Total Accepted: 505.4K
* Total Submissions: 648.5K
* Testcase Example: '"leet**cod*e"'
*
* 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 1^st star is 't' in "leet**cod*e". s becomes
* "lee*cod*e".
* - The closest character to the 2^nd star is 'e' in "lee*cod*e". s becomes
* "lecod*e".
* - The closest character to the 3^rd 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.
*
*
*/
// @lc code=start
class Solution {
public:
string removeStars(string s) {
int cnt = 0;
string res = "";
for (int i = s.size() - 1; i >= 0; i--) {
if (s[i] == '*') {
cnt++;
} else if (cnt != 0 && s[i] != '*') {
cnt--; continue;
} else {
res += s[i];
}
}
reverse(res.begin(), res.end());
return res;
}
};
// @lc code=end