I was asked this question during an interview.
Print the pattern of characters from the given word by arranging the characters in ascending order based on the number of occurrencies.
Input:
"abbccbddddeeeee"Output:
a cc bbb dddd eeeee
I was not able to solve it on the spot, and I can't make my solution working for now.
Specifically, I'm having trouble with arranging in ascending order after populating a HashMap.
My code:
String test = "abbccbdddddddeeeee";
List<Character> orderedList = new ArrayList<Character>();
List<Integer> orderedNumber = new ArrayList<Integer>();
char[] testing = test.toCharArray();
int value = 1;
Map<Character, Integer> pattern = new HashMap<>();
for (int i = 0; i < testing.length; i++) {
value = 1;
if (!pattern.containsKey(testing[i])) {
pattern.put(testing[i], value);
for (int j = i + 1; j < test.length(); j++) {
if (testing[i] == testing[j]) {
value = pattern.get(testing[i]);
value += 1;
pattern.replace(testing[i], value);
}
}
orderedList.add(testing[i]);
orderedNumber.add(value);
}
}
This is for the printing part, but as you can see. I have little success in it.
System.out.println(orderedList);
System.out.println(orderedNumber);
int minNumber = 0;
int minIndex = 0;
for (int i = 0; i < orderedList.size(); i++) {
minNumber = pattern.get(orderedList.get(i));
int maxNumber = 0;
for (int j = i +1; j < orderedList.size(); j++) {
if (minNumber > pattern.get(orderedList.get(j))) {
minNumber = pattern.get(orderedList.get(j));
maxNumber = pattern.get(orderedList.get(i));
}
}
System.out.println(minNumber);
}