791. Custom Sort String, 1122. Relative Sort Array

T: O(nlogn)

S: O(n)

```java
class Solution {
    public String customSortString(String order, String s) {
        int[] ord = new int[26];
        Arrays.fill(ord, 26); // max is 26
        for (int i = 0; i < order.length(); i++) {
            ord[order.charAt(i) - 'a'] = i;
        }

        List<Character> cc = new ArrayList<>();
        for (char ch : s.toCharArray()) {
            cc.add(ch);
        }

        Collections.sort(cc, (a, b) -> {
            return ord[a - 'a'] - ord[b - 'a'];
        });
        
        StringBuilder result = new StringBuilder();
        for (char c : cc) {
            result.append(c);
        }
        return result.toString();
    }
}

/**
using fixing order for cba
 */
```

```java
class Solution {
    public int[] relativeSortArray(int[] arr1, int[] arr2) {
        int[] rank2 = new int[1001];
        Arrays.fill(rank2, arr2.length);
        for (int i = 0; i < arr2.length; i++) {
            rank2[arr2[i]] = i;
        }
        List<Integer> list1 = new ArrayList<>();
        for (int num : arr1) {
            list1.add(num);
        }
        Collections.sort(list1, (a, b) -> {
            if (rank2[a] == rank2[b]) {
                return a - b;
            }
            return rank2[a] - rank2[b];
        });
        int[] result = new int[arr1.length];
        int i = 0;
        for (int num : list1) {
            result[i++] = num;
        }
        return result;
    }
}
```

Last updated