Skip to content

Commit a6ace7a

Browse files
committed
Time: 7 ms (71.38%), Space: 17.8 MB (96.78%) - LeetHub
1 parent 5775803 commit a6ace7a

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# time complexity: O(nlogn)
2+
# space complexity: O(n)
3+
from typing import List
4+
import re
5+
6+
7+
class Solution:
8+
def validateCoupons(self, code: List[str], businessLine: List[str], isActive: List[bool]) -> List[str]:
9+
validBusiness = ["electronics", "grocery", "pharmacy", "restaurant"]
10+
result = []
11+
coupons = []
12+
order = {business: i for i, business in enumerate(validBusiness)}
13+
for currCode, currBusiness, currActive in zip(code, businessLine, isActive):
14+
if currActive and currBusiness in validBusiness and re.fullmatch(r'[A-Za-z0-9_]+', currCode):
15+
coupons.append((order[currBusiness], currBusiness, currCode))
16+
coupons.sort()
17+
result = [coupon[2] for coupon in coupons]
18+
return result
19+
20+
21+
code = ["SAVE20", "", "PHARMA5", "SAVE@20"]
22+
businessLine = ["restaurant", "grocery", "pharmacy", "restaurant"]
23+
isActive = [True, True, True, True]
24+
print(Solution().validateCoupons(code, businessLine, isActive))
25+
code = ["GROCERY15", "ELECTRONICS_50", "DISCOUNT10"]
26+
businessLine = ["grocery", "electronics", "invalid"]
27+
isActive = [False, True, True]
28+
print(Solution().validateCoupons(code, businessLine, isActive))

0 commit comments

Comments
 (0)