Given two strings (of lowercase letters), a pattern and a string. The task is to sort string according to the order defined by pattern. It may be assumed that pattern has all characters of the string and all characters in pattern appear only once.
Input : pat = "bca", str = "abc" Output : str = "bca" Input : pat = "bxyzca", str = "abcabcabc" Output : str = "bbbcccaaa" Input : pat = "wcyuogmlrdfphitxjakqvzbnes", str = "jcdokai" Output : str = "codijak"
The idea is to first count occurrences of all characters in str and store these counts in a count array. Then traverse pattern from left to right, and for each character pat[i], see how many times it appears in count array and copy this character these many times to str.
Below is the implementation of above idea.
Time complexity : O(m + n) where m is length of pattern and n is length of str.
Exercise : In the above solution, it is assumed that pattern has all characters of str. Consider a modified version where pattern may not have all characters and the task is to put all remaining characters (in string but not in pattern) at the end. The remaining characters need to be put in alphabetically sorted order.
Hint : In the second loop, when increase index and put character in str, we can also decrease count at that time. And finally we traverse the count array to put remaining characters in alphabetically sorted order.
This article is contributed by Sanjay Khadda. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.
- Return maximum occurring character in an input string
- Print all the duplicates in the input string
- Remove characters from the first string which are present in the second string
- Remove duplicates from a given string
- Print reverse of a string using recursion
- Write a program to print all permutations of a given string
- Divide a string in N equal parts
- Given a string, find its first non-repeating character
- Write a program to reverse an array or string
- Reverse words in a given string
- Find the smallest window in a string containing all characters of another string
- Lexicographic rank of a string
- Print all permutations in sorted (lexicographic) order
- An in-place algorithm for String Transformation
- Count words in a given string
- Counting Sort
- String matching where one string contains wildcard characters
- Remove "b" and "ac" from a given string
- Find if a string is interleaved of two other strings | DP-33
- Print all ways to break a string in bracket form