1+ /* Implementation of Custom Sort String program code using java
2+ *
3+ * You are given two strings order and str. All the words of order are unique and
4+ * were sorted in some custom order previously.
5+
6+ * Permute the characters of str so that they match the order that order was sorted.
7+ * More specifically, if a character x occurs before a character y in order, then x
8+ * should occur before y in the permuted string.
9+
10+ * Return any permutation of str that satisfies this property.
11+ *
12+ * Problem link: https://leetcode.com/problems/custom-sort-string/
13+ *
14+ */
15+
16+ import java .util .*;
17+ import java .io .*;
18+
19+ class CustomSortString
20+ {
21+ // this function will return any permutation of str so that they match the order that
22+ // order is sorted
23+ public String customSortString (String order , String str )
24+ {
25+ int []freq =new int [26 ];
26+
27+ // determining the frequency of each character
28+ for (char c : str .toCharArray ())
29+ freq [c -'a' ]++;
30+
31+ StringBuilder ans = new StringBuilder ();
32+
33+ // appending the characters in order to ans
34+ for (char orderChar : order .toCharArray ())
35+ {
36+ while (freq [orderChar -'a' ]>0 )
37+ {
38+ ans .append (orderChar );
39+ freq [orderChar -'a' ]--;
40+ }
41+ }
42+
43+ //Adding the rest of the characters
44+ for (int i =0 ;i <26 ;i ++)
45+ {
46+ int freqC = freq [i ];
47+ while (freqC >0 )
48+ {
49+ ans .append ((char )(i +'a' ));
50+ freqC --;
51+ }
52+ }
53+ // returning the resultant string
54+ return ans .toString ();
55+ }
56+
57+ public static void main ()
58+ {
59+ Scanner sc =new Scanner (System .in );
60+ String s = sc .next ();
61+ String t = sc .next ();
62+ CustomSortString obj = new CustomSortString ();
63+ System .out .println (obj .customSortString (s ,t ));
64+ }
65+ }
66+
67+ /*
68+ * Example 1:
69+ *
70+ * Input: order = "cba", s = "abcd"
71+ * Output: "cbad"
72+ * Explanation:
73+ * "a", "b", "c" appear in order, so the order of "a", "b", "c" should be "c", "b", and "a".
74+ * Since "d" does not appear in order, it can be at any position in the returned string. "dcba", "cdba", "cbda" are also valid outputs.
75+ *
76+ * Example 2:
77+ *
78+ * Input: order = "cbafg", s = "abcd"
79+ * Output: "cbad"
80+ *
81+ * Time Complexity: O(order.length + str.length)
82+ */
0 commit comments