|  | 
|  | 1 | +package com.fishercoder.solutions; | 
|  | 2 | + | 
|  | 3 | +import java.util.ArrayList; | 
|  | 4 | +import java.util.Collections; | 
|  | 5 | +import java.util.Comparator; | 
|  | 6 | +import java.util.HashMap; | 
|  | 7 | +import java.util.HashSet; | 
|  | 8 | +import java.util.List; | 
|  | 9 | +import java.util.Map; | 
|  | 10 | +import java.util.Set; | 
|  | 11 | +import java.util.TreeMap; | 
|  | 12 | + | 
|  | 13 | +public class _1452 { | 
|  | 14 | +    public static class Solution1 { | 
|  | 15 | +        public List<Integer> peopleIndexes(List<List<String>> favoriteCompanies) { | 
|  | 16 | +            TreeMap<String, Integer> map = new TreeMap<>(new Comparator<String>() { | 
|  | 17 | +                @Override | 
|  | 18 | +                public int compare(String o1, String o2) { | 
|  | 19 | +                    int diff_length = o1.length() - o2.length(); | 
|  | 20 | +                    if (diff_length != 0) return diff_length; | 
|  | 21 | +                    return o1.compareTo(o2); | 
|  | 22 | +                } | 
|  | 23 | +            }); | 
|  | 24 | +            Map<String, Set<String>> setMap = new HashMap<>(); | 
|  | 25 | +            for (int i = 0; i < favoriteCompanies.size(); i++) { | 
|  | 26 | +                List<String> list = favoriteCompanies.get(i); | 
|  | 27 | +                Collections.sort(list); | 
|  | 28 | +                StringBuilder sb = new StringBuilder(); | 
|  | 29 | +                Set<String> set = new HashSet<>(); | 
|  | 30 | +                for (String str : list) { | 
|  | 31 | +                    sb.append(str); | 
|  | 32 | +                    set.add(str); | 
|  | 33 | +                } | 
|  | 34 | +                map.put(sb.toString(), i); | 
|  | 35 | +                setMap.put(sb.toString(), set); | 
|  | 36 | +            } | 
|  | 37 | +            List<String> keys = new ArrayList<>(); | 
|  | 38 | +            for (String key : map.keySet()) { | 
|  | 39 | +                keys.add(key); | 
|  | 40 | +            } | 
|  | 41 | +            List<Integer> result = new ArrayList<>(); | 
|  | 42 | +            for (int i = 0; i < keys.size(); i++) { | 
|  | 43 | +                boolean goodCandidate = true; | 
|  | 44 | +                for (int j = i + 1; j < keys.size(); j++) { | 
|  | 45 | +                    if (keys.get(j).contains(keys.get(i))) { | 
|  | 46 | +                        goodCandidate = false; | 
|  | 47 | +                        break; | 
|  | 48 | +                    } | 
|  | 49 | +                } | 
|  | 50 | +                if (goodCandidate) { | 
|  | 51 | +                    Set<String> smallerSet = setMap.get(keys.get(i)); | 
|  | 52 | +                    for (int j = 0; j < keys.size(); j++) { | 
|  | 53 | +                        if (j != i) { | 
|  | 54 | +                            Set<String> biggerSet = setMap.get(keys.get(j)); | 
|  | 55 | +                            if (biggerSet.containsAll(smallerSet)) { | 
|  | 56 | +                                goodCandidate = false; | 
|  | 57 | +                                break; | 
|  | 58 | +                            } | 
|  | 59 | +                        } | 
|  | 60 | +                    } | 
|  | 61 | +                } | 
|  | 62 | +                if (goodCandidate) { | 
|  | 63 | +                    result.add(map.get(keys.get(i))); | 
|  | 64 | +                } | 
|  | 65 | +            } | 
|  | 66 | +            Collections.sort(result); | 
|  | 67 | +            return result; | 
|  | 68 | +        } | 
|  | 69 | +    } | 
|  | 70 | +} | 
0 commit comments