On Given Map of Character and Priority of character, design your own sorting algorithm to sort list of strings.
There will be two inputs as per below.
Input:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Map<Character, Integer> characterIndexMap = new TreeMap<Character, Integer>() { { put('z', 0); put('q', 1); put('a', 2); put('s', 3); put('d', 4); put('y', 5); put('c', 6); } }; List<String> listOfStringsToSort = new ArrayList<String>() { { add("zasd"); add("qazyc"); add("yczaq"); add("caq"); add("czq"); add("dzaq"); add("czqa"); add("zzsd"); } }; |
Output:
1 2 3 4 5 6 7 8 |
zzsd zasd qazyc dzaq yczaq czq czqa caq |
Algorithm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
package com.omt.learn.algo; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.TreeMap; /* * zzsd zasd qazyc dzaq yczaq czq czqa caq */ public class CustomSortingUsingJavaClasses { public static void main(String args[]) { Map<Character, Integer> characterIndexMap = new TreeMap<Character, Integer>() { { put('z', 0); put('q', 1); put('a', 2); put('s', 3); put('d', 4); put('y', 5); put('c', 6); } }; List<String> listOfStringsToSort = new ArrayList<String>() { { add("zasd"); add("qazyc"); add("yczaq"); add("caq"); add("czq"); add("dzaq"); add("czqa"); add("zzsd"); } }; sortList(characterIndexMap, listOfStringsToSort); for (String string : listOfStringsToSort) { System.out.println(string); } } public static void sortList(Map<Character, Integer> characterIndexMap, List<String> listOfStringsToSort) { Collections.sort(listOfStringsToSort, new Comparator<String>() { @Override public int compare(String o1, String o2) { int min = Math.min(o1.length(), o2.length()); int index = 0; while (index < min) { if (o1.charAt(index) != o2.charAt(index)) { return characterIndexMap.get(o1.charAt(index)) - characterIndexMap.get(o2.charAt(index)); } index++; } return o1.length() - o2.length(); }; }); } } |