-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy path2390-removing-stars-from-a-string.rb
64 lines (49 loc) · 1.58 KB
/
2390-removing-stars-from-a-string.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# frozen_string_literal: true
# 2390. Removing Stars From a String
# https://leetcode.com/problems/removing-stars-from-a-string/
# Medium
=begin
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 <= 105
* s consists of lowercase English letters and stars *.
* The operation above can be performed on s.
=end
# @param {String} s
# @return {String}
def remove_stars(s)
r = []
s.each_byte do
_1 == 42 ? r.pop : r << _1
end
r.pack "c*"
end
# **************** #
# TEST #
# **************** #
require "test/unit"
class Test_remove_stars < Test::Unit::TestCase
def test_
assert_equal "lecoe", remove_stars("leet**cod*e")
assert_equal "", remove_stars("erase*****")
end
end