# πŸ‘½ Verifying an Alien Dictionary (LeetCode 953)

μž‘μ„±μž

μΉ΄ν…Œκ³ λ¦¬:

← ν”Όλ“œλ‘œ
DEV Community · swati goyal · 2026-06-16 개발(SW)

swati goyal

Imagine you’re interviewing on another planet. πŸŒŽβž‘οΈπŸ›Έ

The aliens use the same English lowercase letters (a-z), but their alphabet order is completely different!

Your task is to determine whether a list of words is sorted according to the alien alphabet.

πŸ“Œ Problem Statement

Given:

  • An array of words
  • A string representing the alien alphabet order

Return:

  • true if the words are sorted lexicographically according to the alien language
  • false otherwise

🧠 Example 1

words = ["hello","leetcode"]
order = "hlabcdefgijkmnopqrstuvwxyz"

Enter fullscreen mode Exit fullscreen mode

Output:

true

Enter fullscreen mode Exit fullscreen mode

Why?

The first differing characters are:

hello
leetcode
↑
h comes before l

Enter fullscreen mode Exit fullscreen mode

Since h < l in the alien language, the words are correctly ordered.

🧠 Example 2

words = ["word","world","row"]
order = "worldabcefghijkmnpqstuvxyz"

Enter fullscreen mode Exit fullscreen mode

Output:

false

Enter fullscreen mode Exit fullscreen mode

Comparison:

word
world

Enter fullscreen mode Exit fullscreen mode

First differing characters:

word
worl(d)
    ↑

world
worl(l)
    ↑

Enter fullscreen mode Exit fullscreen mode

In the alien dictionary, d appears after l, making:

word > world

Enter fullscreen mode Exit fullscreen mode

which violates the sorted order.

🧠 Example 3

words = ["apple","app"]
order = "abcdefghijklmnopqrstuvwxyz"

Enter fullscreen mode Exit fullscreen mode

Output:

false

Enter fullscreen mode Exit fullscreen mode

Both words share the prefix:

app

Enter fullscreen mode Exit fullscreen mode

But:

apple
app

Enter fullscreen mode Exit fullscreen mode

The shorter word should come first.

Just like:

app < apple

Enter fullscreen mode Exit fullscreen mode

Therefore:

apple > app

Enter fullscreen mode Exit fullscreen mode

and the list is not sorted.

πŸ” Key Observation

Comparing words in an alien language is exactly like comparing words in English.

The only difference is:

Character ranking is different.

Enter fullscreen mode Exit fullscreen mode

So instead of comparing characters directly:

'a' < 'b'

Enter fullscreen mode Exit fullscreen mode

we compare their positions in the alien alphabet.

πŸš€ Step 1: Build Character Ranking

Given:

order = "hlabcdefgijkmnopqrstuvwxyz"

Enter fullscreen mode Exit fullscreen mode

Create a mapping:

h β†’ 0
l β†’ 1
a β†’ 2
b β†’ 3
...

Enter fullscreen mode Exit fullscreen mode

This allows us to instantly know which character comes first.

πŸš€ Step 2: Compare Adjacent Words

If the entire list is sorted, then every adjacent pair must also be sorted.

So compare:

words[0] vs words[1]
words[1] vs words[2]
words[2] vs words[3]
...

Enter fullscreen mode Exit fullscreen mode

If any comparison fails, return false.

πŸš€ Step 3: Compare Two Words

Consider:

hello
leetcode

Enter fullscreen mode Exit fullscreen mode

Compare character by character:

h vs l

Enter fullscreen mode Exit fullscreen mode

As soon as characters differ:

  • If first character comes before second β†’ valid
  • Otherwise β†’ invalid

No need to check the remaining characters.

⚠️ Special Case: Prefix Problem

Consider:

apple
app

Enter fullscreen mode Exit fullscreen mode

All common characters match:

app
app

Enter fullscreen mode Exit fullscreen mode

Now one word ends.

Lexicographical rule:

Shorter word comes first.

Enter fullscreen mode Exit fullscreen mode

Therefore:

app < apple

Enter fullscreen mode Exit fullscreen mode

If the first word is longer:

apple > app

Enter fullscreen mode Exit fullscreen mode

Return false.

βœ… Java Solution

class Solution {
    public boolean isAlienSorted(String[] words, String order) {
        int n = words.length;

        int[] charToIdxMap = new int[26];
        for(int i = 0; i < 26; i++) {
            charToIdxMap[order.charAt(i) - 'a'] = i;
        }

        for(int i = 1; i < n; i++) {
            if(!isValid(words[i - 1], words[i], charToIdxMap)) {
                return false;
            }
        }

        return true;
    }

    public boolean isValid(String word0, String word1, int[] charToIdxMap) {
        int n0 = word0.length();
        int n1 = word1.length();
        int len = Math.min(n0, n1);

        for(int i = 0; i < len; i++) {
            char ch1 = word0.charAt(i);
            char ch2 = word1.charAt(i);

            if(ch1 != ch2) {
                return charToIdxMap[ch1 - 'a'] < charToIdxMap[ch2 - 'a'];
            }
        }

        return n0 <= n1;
    }
}

Enter fullscreen mode Exit fullscreen mode

🎯 Dry Run

Input:

words = ["hello","leetcode"]
order = "hlabcdefgijkmnopqrstuvwxyz"

Enter fullscreen mode Exit fullscreen mode

Build Mapping

h β†’ 0
l β†’ 1
a β†’ 2
...

Enter fullscreen mode Exit fullscreen mode

Compare

hello
leetcode

Enter fullscreen mode Exit fullscreen mode

First characters:

h vs l

Enter fullscreen mode Exit fullscreen mode

Mapped positions:

h β†’ 0
l β†’ 1

Enter fullscreen mode Exit fullscreen mode

Since:

0 < 1

Enter fullscreen mode Exit fullscreen mode

the pair is valid.

No more pairs remain.

Return:

true

Enter fullscreen mode Exit fullscreen mode

⏱️ Time Complexity

Let:

  • N = number of words
  • L = average word length

Building the map:

O(26)

Enter fullscreen mode Exit fullscreen mode

Comparing adjacent words:

O(N Γ— L)

Enter fullscreen mode Exit fullscreen mode

Overall:

Time Complexity = O(N Γ— L)

Enter fullscreen mode Exit fullscreen mode

πŸ’Ύ Space Complexity

We store the character ranking map:

int[26]

Enter fullscreen mode Exit fullscreen mode

Therefore:

Space Complexity = O(1)

Enter fullscreen mode Exit fullscreen mode

because the alphabet size is fixed.

πŸ”₯ Interview Takeaways

This problem tests:

  • Custom sorting logic
  • Lexicographical comparison
  • String processing
  • Edge cases involving prefixes
  • Efficient use of character mappings

The most important insight is:

Don’t compare characters directly. Compare their positions in the alien alphabet.

Once you build the ranking map, the rest becomes a straightforward lexicographical comparison problem.

πŸ’¬ What do you think?

Have you seen a variation of this problem where the alien alphabet order was not given directly but had to be derived from the words themselves? That’s an interesting follow-up often asked in interviews. Let me know how you would approach it! πŸ‘‡

μ›λ¬Έμ—μ„œ 계속 β†—

μΆ”μΆœ λ³Έλ¬Έ Β· 좜처: dev.to Β· https://dev.to/swatigoyal911/-verifying-an-alien-dictionary-leetcode-953-3amb

μ½”λ©˜νŠΈ

λ‹΅κΈ€ 남기기

이메일 μ£Όμ†ŒλŠ” κ³΅κ°œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•„μˆ˜ ν•„λ“œλŠ” *둜 ν‘œμ‹œλ©λ‹ˆλ‹€