Sort strings on the basis of their numeric part
Given a sentence S of size N where each word is a concatenation of a numeric part followed by a bunch of characters. The task is to arrange the words in increasing order of their numeric part.
Examples:
Input: S = “24-amazing 7-coders 11-are”
Output: coders are amazing
Explanation: order of numeric values are 7, 11, 24.
So they are arranged accordinglyInput: S = “19-Love 10-I 2001-cricket”
Output: I Love cricket
Approach: The approach of the solution is based on the concept of min-heap. Split the strings on the basis of spaces and put them in the heap. At last pop them from the heap and print them in order. That will give the desired solution.
Below is the implementation of the above approach.
C++
// C++ code to implement the approach #include <bits/stdc++.h> #include <boost/algorithm/string.hpp> using namespace std; // For arranging words on the basis // of numeric part // Function to arrange the sentence string solve(string str) { vector<string> arr; boost::split(arr, str, boost::is_any_of( " " )); priority_queue<pair< int ,string>> pq; for ( int i = 0; i < arr.size(); i++) { string s = arr[i]; string N = "" ; int a = 0; while (s[a] != '-' ) { N += s[a]; a += 1; } int num = stoi(N); string word = arr[i].substr(a + 1); pq.push(make_pair(num, word)); } string sb = "" ; while (0 < pq.size()) { sb = pq.top().second + " " +sb; pq.pop(); } return sb; } // Driver code int main() { string S = "19-Love 10-I 2001-cricket" ; string ans = solve(S); cout<<ans; } // This code is contributed by Pushpesh raj |
Java
// Java code to implement above approach import java.util.*; class GFG { // For arranging words on the basis // of numeric part public static class pair implements Comparable<pair> { int num; String word; pair( int num, String word) { this .num = num; this .word = word; } public int compareTo(pair o) { return this .num - o.num; } } // Function to arrange the sentence public static String solve(String str) { String[] arr = str.split( " " ); PriorityQueue<pair> pq = new PriorityQueue<>(); for ( int i = 0 ; i < arr.length; i++) { String s = arr[i]; String N = "" ; int a = 0 ; while (s.charAt(a) != '-' ) { N += s.charAt(a); a++; } int num = Integer.parseInt(N); String word = s.substring(a + 1 ); pq.add( new pair(num, word)); } StringBuilder sb = new StringBuilder(); while (pq.size() > 0 ) { pair p = pq.remove(); sb.append(p.word); sb.append( " " ); } sb.deleteCharAt(sb.length() - 1 ); return sb.toString(); } // Driver code public static void main(String[] args) { String S = "19-Love 10-I 2001-cricket" ; String ans = solve(S); System.out.println(ans); } } |
Python3
# python3 code for the above approach # For arranging words on the basis # of numeric part # Function to arrange the sentence def solve( str ): arr = str .split( " " ) pq = [] for i in range ( 0 , len (arr)): s = arr[i] N = "" a = 0 while (s[a] ! = '-' ): N + = s[a] a + = 1 num = int (N) word = s[a + 1 :] pq.append([num, word]) pq.sort() sb = "" k = 0 while (k < len (pq)): sb + = pq[k][ 1 ] + " " k k + = 1 return sb # Driver code if __name__ = = "__main__" : S = "19-Love 10-I 2001-cricket" ans = solve(S) print (ans) # This code is contributed by rakeshsahni |
Javascript
<script> // JavaScript code for the above approach // For arranging words on the basis // of numeric part // Function to arrange the sentence function solve(str) { let arr = str.split( " " ); let pq = [] for (let i = 0; i < arr.length; i++) { let s = arr[i]; let N = "" ; let a = 0; while (s.charAt(a) != '-' ) { N += s.charAt(a); a++; } let num = parseInt(N); let word = s.slice(a + 1); pq.push({ 'first' : num, 'second' : word }); } pq.sort( function (a, b) { return a.first - b.first }) let sb = "" ; let k = 0; while (k < pq.length) { sb += pq[k].second + " " ; k++; } return sb } // Driver code let S = "19-Love 10-I 2001-cricket" ; let ans = solve(S); document.write(ans); // This code is contributed by Potta Lokesh </script> |
I Love cricket
Time Complexity: O(N)
Auxiliary Space: O(N)