|
| 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