Description

/**
* Finds the longest common suffix among the strings in an array. For example,
* if arr is [“gladly”, “badly”, “boodly”, “sadly”], the method returns the
* string “dly”. If arr is [“foo”, “food”], the method returns an empty string.
*
* @param arr array of strings
* @return longest common suffix
*/
public static String longestCommonSuffix(String[] arr) {

/**
* Finds a permutation with the property that if arr is rearranged according to
* that permutation, it will end up in ascending order. That is, for an array
* arr, after executing the code
*
* <pre>
* int[] p = findPermutationToSort(arr);
* rearrange(arr, p);
* </pre>
*
* the array arr is sorted. For example, if arr is [12, 7, 2, 5, 8], the method
* returns the array [4, 2, 0, 1, 3]. You can assume that the given array has no
* duplicates.
*
* @param arr given array
* @return permutation that will rearrange arr to be sorted in ascending order
*/
public static int[] findPermutationToSort(int[] arr) {