Coupon Code Validator

Easy
Watch on YouTube ↗

Solution

class Solution {
    public List<String> validateCoupons(String[] code, String[] businessLine, boolean[] isActive) {
        HashSet<String> bizlines = new HashSet<>();
        Collections.addAll(bizlines, "electronics", "grocery", "pharmacy", "restaurant");
        List<String[]> temp = new ArrayList<>(); // [businessline, code]

        for(int i=0; i<code.length; i++) {
            // base case
            if(!isActive[i] || code[i].isEmpty())
                continue;
            if(isAlphanumeric(code[i]) && bizlines.contains(businessLine[i]) && isActive[i] ) {
                temp.add(new String[]{businessLine[i], code[i]});
            }
        }

        // sorting
        Collections.sort(temp, (a,b)-> {
            if(!a[0].equals(b[0])) {
                return a[0].compareTo(b[0]);
            } else {
                return a[1].compareTo(b[1]);
            }
        });

        List<String> ans = new ArrayList<>();

        for(String[] item : temp) {
            ans.add(item[1]);
        }

        return ans;

        
    }

    boolean isAlphanumeric(String str) {
        for(char ch : str.toCharArray()) {
            if(Character.isDigit(ch) || Character.isLetter(ch) || ch=='_')
                continue;
            return false;
        }
        return str.length() > 0;
        /*
        String pattern = "^[a-zA-Z0-9_]+$";
        return str.matches(pattern);
        */
    }
}