โš”๏ธ
DSA Important Questions
  • ๐Ÿ˜‡README
  • ๐Ÿ”ซQuestion List
  • ๐ŸงชFormula List
  • ๐Ÿ—’๏ธ01 Array
    • โœ…Rotate Matrix
    • โœ…Max Sum Contiguous Subarray
    • Find Duplicate in Array
    • โœ…Merge Intervals
    • โœ…Spiral Order Matrix I
    • Repeat and Missing Number Array
    • โœ…Merge Overlapping Intervals
    • โœ…Set Matrix Zeros
    • โœ…Spiral Order Matrix II
    • Largest Number
    • First Missing Integer
    • โœ…Pascal Triangle
    • โญMax Distance
    • โœ…Wavy Array
    • Next Permutation
    • โœ…Min Steps in Infinite Grid
    • Flip
    • โญFind Permutation
    • โญMaximum Absolute Difference
    • โญMaximum Unsorted Subarray
    • Reorder Data in Log File
    • โœ…Make equal elements Array
  • โž•02 Math
    • โœ…Excel Column Number
    • โญExcel Column Title
    • โญGrid Unique Paths
    • โญPower Of Two Integers
    • โœ…Next Similar Number
    • โญk-th Permutation
  • ๐Ÿ”03 Binary Search
    • โญMedian of Array
    • โญSquare Root of Integer
    • โญRotated Sorted Array Search
    • โญMatrix Median
    • Capacity To Ship Packages Within B Days
  • ๐Ÿงต04 String
    • Implement StrStr
    • โญInteger to Roman
    • โญRoman to Integer
    • Length of Last Word
    • โญatoi
    • โญValid IP Addresses
    • โญCompare Version Numbers
    • โญLongest Palindromic Substring
    • Count And Say
    • Reverse the String
    • Power of 2
    • ๐ŸšงKMP: Minimum Characters Required to Make a String Palindromic
    • โญConvert to Palindrome
    • Bulls and Cows
  • 1๏ธโƒฃ05 Bit Manipulation
    • Reverse Bits
    • Single Number
    • โญDivide Integers
    • โญSingle Number II
    • โญCount Total Set Bits
    • โญPalindromic Binary Representation
  • โœŒ๏ธ06 Two Pointers
    • Merge Two Sorted Lists II
    • โญ3 Sum
    • Remove Duplicates from sorted Array
    • โญContainer With Most Water
    • Remove Element from Array
    • โญMax Continuous Series of 1s
    • Pair With Given Difference
    • โญMaximum Ones After Modification
  • ๐Ÿ”—07 Linked List
    • Swap List Nodes in Pairs
    • Rotate List
    • โญReorder List
    • Merge Two Sorted Lists
    • Remove Duplicates from Sorted List
    • Add Two Numbers as Lists
    • Remove Nth Node from List End
    • โญList Cycle
    • Intersection of Linked Lists
    • โญReverse Linked List II
    • Palindrome List
    • โญK reverse linked list
    • โญReverse Alternate K Nodes
    • โญKth Node From Middle
    • โญSort Binary Linked List
    • โญEven Reverse
  • ๐Ÿ“š08 Stacks and Queues
    • โญRain Water Trapping
    • Generate all Parentheses
    • โญLargest Rectangle in Histogram
    • โญMin Stack
    • Redundant Braces
    • Nearest Smaller Element
    • โญFirst non-repeating character in a stream of characters
    • โœ…Balanced Parantheses!
  • ๐Ÿ”™09 Backtracking
    • โญKth Permutation Sequence
    • โญCombination Sum
    • Combination Sum II
    • โญNQueens
    • Combinations
    • โญSubsets II
    • Subset
    • Palindrome Partitioning
  • ๐Ÿ’ฑ10 Hashing
    • โญLongest Consecutive Sequence
    • โญ4 Sum
    • โญAnagrams
    • โญPoints on the Straight Line
    • 2 Sum
    • โญValid Sudoku
    • Copy List
    • Longest Substring Without Repeat
  • ๐Ÿ—ป11 Heaps & Maps
    • Merge K Sorted Lists
    • โญLRU Cache
    • โญInversions
    • Distinct Numbers in Window
  • ๐ŸŒณ12 Tree Data Structure
    • โœ…Inorder Traversal
    • โญRecover Binary Search Tree
    • โญInorder Traversal of Cartesian Tree
    • โญLeast Common Ancestor
    • โญConstruct Binary Tree From Inorder And Preorder
    • Flatten Binary Tree to Linked List
    • Valid Binary Search Tree
    • โœ…Preorder Traversal
    • โญBinary Tree From Inorder And Postorder
    • Balanced Binary Tree
    • โœ…Sorted Array To Balanced BST
    • Symmetric Binary Tree
    • โœ…Postorder Traversal
    • โญPopulate Next Right Pointers Tree
    • Identical Binary Trees
    • BST Iterator
    • ZigZag Level Order Traversal BT
    • Path Sum
    • Next Pointer Binary Tree
    • Min Depth of Binary Tree
    • Root to Leaf Paths With Sum
    • โญKth Smallest Element in Tree
    • โญ2-Sum Binary Tree
    • Vertical Order traversal of Binary Tree
    • โญDiagonal Traversal
    • Cousins in Binary Tree
    • Path to Given Node
    • Remove Half Nodes
    • Merge two Binary Tree
    • โญBurn a Tree
    • Nodes at Distance K
    • Vertical Sum of a Binary Tree
    • Covered / Uncovered Nodes
  • 13 Dynamic Programming
    • Ugly Number II
    • Coin Change
    • 0 - 1 Knapsack Problem
    • Permutation Coefficient
  • 14 Greedy Algorithm
    • โญGas Station
    • โญMajority Element
    • โญDistribute Candy
    • โญHighest Product
    • Assign Mice to Holes
    • โญMeeting rooms
  • ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ15 Graph
    • Clone Graph
    • Word Search Board
    • โญStepping Numbers
    • Black Shapes
    • Knight On Chess Board
    • โŒSmallest Multiple With 0 and 1
    • โญCommutable Islands
    • Possibility of finishing all courses given pre-requisites
    • โŒValid Path
    • Cycle in Directed Graph
    • โŒCycle in Undirected Graph
Powered by GitBook
On this page
  1. 01 Array

Reorder Data in Log File

PreviousMaximum Unsorted SubarrayNextMake equal elements Array

Last updated 2 years ago

Question

You are given an array of logs. Each log is a space-delimited string of words, where the first word is the identifier. There are two types of logs:

  • Letter-logs: All words (except the identifier) consist of lowercase English letters.

  • Digit-logs: All words (except the identifier) consist of digits.

Reorder these logs so that:

  • The letter-logs come before all digit-logs.

  • The letter-logs are sorted lexicographically by their contents. If their contents are the same, then sort them lexicographically by their identifiers.

  • The digit-logs maintain their relative ordering.

Return the final order of the logs.

Problem Constraints 1 <= logs.length <= 1000 3 <= logs[i].length <= 1000 All the tokens of logs[i] are separated by a single space. logs[i] is guaranteed to have an identifier and at least one word after the identifier. Input Format The first argument is a string array A where each element is a log. Output Format Return the string array A after making the changes. Example Input Input 1:

A = ["dig1-8-1-5-1", "let1-art-can", "dig2-3-6", "let2-own-kit-dig", 
"let3-art-zero"]

Input 2:

A = ["a1-9-2-3-1","g1-act-car","zo4-4-7","ab1-off-key-dog","a8-act-zoo"]

Example Output Output 1:

["let1-art-can","let3-art-zero","let2-own-kit-dig","dig1-8-1-5-1",
"dig2-3-6"]

Output 2:

["g1-act-car", "a8-act-zoo", "ab1-off-key-dog", "a1-9-2-3-1", "zo4-4-7"]

Example Explanation Explanation 1:

The letter-log contents are all different, so their ordering is "art-can", "art-zero", "own-kit-dig".
The digit-logs have a relative order of "dig1-8-1-5-1", "dig2-3-6".

Explanation 2:

The array has been sorted restricted to the conditions given.
inline string getType(string log) {
    return (isdigit(log.back())? "digit" : "letter");
}

inline string getMessage(string log) {
    return log.substr(log.find('-'));
}

inline string getID(string log) {
    return log.substr(0, log.find('-'));
}

bool comp(string log1, string log2) {
    // is log1 < log2?
    if(getMessage(log1) == getMessage(log2)) 
        return getID(log1) < getID(log2);
    return getMessage(log1) < getMessage(log2);
}
vector<string> Solution::reorderLogs(vector<string> &A) {
    vector<string> digits;

    // store digits in order
    for(string x: A) 
        if(getType(x) == "digit")
            digits.push_back(x);
    
    int digitCount = digits.size();
    int letterCount = A.size() - digitCount;

    // segregate
    int p1 = 0, p2 = A.size() - 1;
    while(p1 < p2) 
        if(getType(A[p1]) == "letter")
            p1++;
        else if(getType(A[p2]) == "digit")
            p2--;
        else 
            swap(A[p1++], A[p2--]);

    // place digit logs
    int k = 0;
    for(int i = letterCount; i < A.size(); i++)
        A[i] = digits[k++];

    // sort the letter logs
    sort(A.begin(), A.begin() + letterCount, comp);

    return A;
}
  1. Store the digit logs in a separate vector to preserve their order.

  2. Segregate the digits and letters such that letters appear before the digits.

  3. Insert the digits back into the digits portion in order.

  4. Create a custom comparator function according to the specified condition.

  5. Sort the letter part.

Using Extra Space
string typeOf(string log) {
    return (isdigit(log.back()) ? "Digit-Log" : "Letter-Log");
}

string getContent(const string &log) {
    int firstHyphenIndex = 0;
    while(log[firstHyphenIndex] != '-')
        firstHyphenIndex++;
        
    return log.substr(firstHyphenIndex + 1);
}

bool contentComparator(const string &log1, const string &log2) {
    return getContent(log1) < getContent(log2);
}

vector<string> Solution::reorderLogs(vector<string> &A) {
    vector<string> res;
    
    for(string log : A)
        if(typeOf(log) == "Letter-Log")
            res.push_back(log);
            
    sort(res.begin(), res.end(), contentComparator);
    
    for(string log : A)
        if(typeOf(log) == "Digit-Log")
            res.push_back(log);
            
    return res;
}
๐Ÿ—’๏ธ
Page cover image
Reorder Data in Log Files - InterviewBitInterviewBit
Logo