C# | Array Lookup, Sort and Set a Flag if Order Changes
public class Solution {
    public bool IsAlienSorted(string[] words, string order) {
        var orderMap = new int[order.Length];
        for (int i = 0; i < order.Length; i++)
            orderMap[order[i] - 'a'] = i;
        
        bool ans = true;
       
        Array.Sort(words, (a, b) => 
        {
            int i = 0;
            while (i < a.Length && i < b.Length)
            {
                var diff = orderMap[a[i]-'a'] - orderMap[b[i]-'a'];
                if (diff != 0) 
                {
                    if (diff > 0) ans = false; // order changed

                    return diff;
                }

                i++;
            }

            if (a.Length == b.Length) return 0;

            if (a.Length < b.Length) return -1;

            ans = false;  // order changed
            return 1;
        });
        
        
        return ans;
    }
}
Comments (0)