Description
You are given three arrays of length n
that describe the properties of n
coupons: code
, businessLine
, and isActive
. The ith
coupon has:
code[i]
: a string representing the coupon identifier.businessLine[i]
: a string denoting the business category of the coupon.isActive[i]
: a boolean indicating whether the coupon is currently active.
A coupon is considered valid if all of the following conditions hold:
code[i]
is non-empty and consists only of alphanumeric characters (a-z, A-Z, 0-9) and underscores (_
).businessLine[i]
is one of the following four categories:"electronics"
,"grocery"
,"pharmacy"
,"restaurant"
.isActive[i]
is true.
Return an array of the codes of all valid coupons, sorted first by their businessLine in the order: "electronics"
, "grocery"
, "pharmacy", "restaurant"
, and then by code in lexicographical (ascending) order within each category.
Β
Example 1:
Input: code = ["SAVE20","","PHARMA5","SAVE@20"], businessLine = ["restaurant","grocery","pharmacy","restaurant"], isActive = [true,true,true,true]
Output: ["PHARMA5","SAVE20"]
Explanation:
- First coupon is valid.
- Second coupon has empty code (invalid).
- Third coupon is valid.
- Fourth coupon has special character
@
(invalid).
Example 2:
Input: code = ["GROCERY15","ELECTRONICS_50","DISCOUNT10"], businessLine = ["grocery","electronics","invalid"], isActive = [false,true,true]
Output: ["ELECTRONICS_50"]
Explanation:
- First coupon is inactive (invalid).
- Second coupon is valid.
- Third coupon has invalid business line (invalid).
Β
Constraints:
n == code.length == businessLine.length == isActive.length
1 <= n <= 100
0 <= code[i].length, businessLine[i].length <= 100
code[i]
andbusinessLine[i]
consist of printable ASCII characters.isActive[i]
is eithertrue
orfalse
.
Solution
Python3
class Solution:
def validateCoupons(self, code: List[str], businessLine: List[str], isActive: List[bool]) -> List[str]:
def validateCode(code):
if len(code) == 0: return False
for x in code:
if not (x.isdigit() or x.islower() or x.isupper() or x == "_"):
return False
return True
def validateBusiness(biz):
return biz in ["electronics", "grocery", "pharmacy", "restaurant"]
def getBusinessSort(val):
if val == "electronics":
return 0
elif val == "grocery":
return 1
elif val == "pharmacy":
return 2
else:
return 3
res = []
for c, business, active in zip(code, businessLine, isActive):
if active and validateCode(c) and validateBusiness(business):
res.append([c, business])
res.sort(key = lambda x : (getBusinessSort(x[1]), x[0]))
return [x[0] for x in res]