惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
J
Java Code Geeks
爱范儿
爱范儿
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 三生石上(FineUI控件)
H
Hackread – Cybersecurity News, Data Breaches, AI and More
B
Blog RSS Feed
Google DeepMind News
Google DeepMind News
Jina AI
Jina AI
The GitHub Blog
The GitHub Blog
I
InfoQ
月光博客
月光博客
博客园 - 聂微东
博客园 - Franky
The Cloudflare Blog
阮一峰的网络日志
阮一峰的网络日志
博客园_首页
G
Google Developers Blog
Blog — PlanetScale
Blog — PlanetScale
L
LangChain Blog
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
# 👽 Verifying an Alien Dictionary (LeetCode 953)
swati goyal · 2026-06-16 · via DEV Community

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"

Output:

true

Why?

The first differing characters are:

hello
leetcode
↑
h comes before l

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


🧠 Example 2

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

Output:

false

Comparison:

word
world

First differing characters:

word
worl(d)
    ↑

world
worl(l)
    ↑

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

word > world

which violates the sorted order.


🧠 Example 3

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

Output:

false

Both words share the prefix:

app

But:

apple
app

The shorter word should come first.

Just like:

app < apple

Therefore:

apple > app

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.

So instead of comparing characters directly:

'a' < 'b'

we compare their positions in the alien alphabet.


🚀 Step 1: Build Character Ranking

Given:

order = "hlabcdefgijkmnopqrstuvwxyz"

Create a mapping:

h → 0
l → 1
a → 2
b → 3
...

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]
...

If any comparison fails, return false.


🚀 Step 3: Compare Two Words

Consider:

hello
leetcode

Compare character by character:

h vs l

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

All common characters match:

app
app

Now one word ends.

Lexicographical rule:

Shorter word comes first.

Therefore:

app < apple

If the first word is longer:

apple > app

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;
    }
}


🎯 Dry Run

Input:

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

Build Mapping

h → 0
l → 1
a → 2
...


Compare

hello
leetcode

First characters:

h vs l

Mapped positions:

h → 0
l → 1

Since:

0 < 1

the pair is valid.

No more pairs remain.

Return:

true


⏱️ Time Complexity

Let:

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

Building the map:

O(26)

Comparing adjacent words:

O(N × L)

Overall:

Time Complexity = O(N × L)


💾 Space Complexity

We store the character ranking map:

int[26]

Therefore:

Space Complexity = O(1)

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! 👇