TikTok VO 面试经验分享:Alien Dictionary 外星词典 BFS题 - Oavoservice

2025-08-20
TikTok VO 面试经验分享:Alien Dictionary 外星词典 BFS题 - Oavoservice 封面

TikTok SDE 0820 面经 VO

Candidate 在 TikTok VO coding 环节遇到了经典题 —— Alien Dictionary 外星词典

今天面试官是一个华人小哥,看起来比较和谐,先是双方自我介绍,然后直接就是 Coding,上来就出一道字节题库里的经典 BFS 题。

题目描述

有一种使用英语字母表的外星语言,但字母顺序不同。给定一个由该外星语言单词组成的列表,且这些单词已经按照这种新语言的字母顺序排序完成。你需要推导出这种语言可能的字母顺序,即字符的排列顺序。如果存在多种可能的顺序,返回其中任意一种即可。如果输入无效,例如排序规则自相矛盾,则返回空字符串。

Follow up

如果有多种合法的字母顺序,要求返回字典序最小的那一个怎么办?

解题思路

这是一道经典的拓扑排序问题,可以使用 BFS 来解决:

  1. 构建图:通过比较相邻单词,找出字符之间的相对顺序关系
  2. 计算入度:统计每个字符的入度
  3. BFS 拓扑排序:从入度为0的字符开始,逐步构建字母顺序
  4. 检测环:如果最终结果包含所有字符,说明无环;否则存在矛盾

代码实现

from collections import defaultdict, deque

def alienOrder(words):
    # 构建图和入度
    graph = defaultdict(set)
    in_degree = defaultdict(int)
    
    # 初始化所有字符的入度为0
    for word in words:
        for char in word:
            in_degree[char] = 0
    
    # 通过比较相邻单词构建图
    for i in range(len(words) - 1):
        word1, word2 = words[i], words[i + 1]
        min_len = min(len(word1), len(word2))
        
        # 检查前缀情况
        if len(word1) > len(word2) and word1[:min_len] == word2[:min_len]:
            return ""  # 无效输入
        
        # 找到第一个不同的字符
        for j in range(min_len):
            if word1[j] != word2[j]:
                if word2[j] not in graph[word1[j]]:
                    graph[word1[j]].add(word2[j])
                    in_degree[word2[j]] += 1
                break
    
    # BFS 拓扑排序
    queue = deque([char for char in in_degree if in_degree[char] == 0])
    result = []
    
    while queue:
        char = queue.popleft()
        result.append(char)
        
        for neighbor in graph[char]:
            in_degree[neighbor] -= 1
            if in_degree[neighbor] == 0:
                queue.append(neighbor)
    
    # 检查是否所有字符都被包含
    return ''.join(result) if len(result) == len(in_degree) else ""

Follow up 解决方案

对于要求返回字典序最小的字母顺序,可以把拓扑排序的队列换成 priority queue

import heapq

def alienOrderLexicographicallySmallest(words):
    # 构建图和入度(同上)
    graph = defaultdict(set)
    in_degree = defaultdict(int)
    
    for word in words:
        for char in word:
            in_degree[char] = 0
    
    for i in range(len(words) - 1):
        word1, word2 = words[i], words[i + 1]
        min_len = min(len(word1), len(word2))
        
        if len(word1) > len(word2) and word1[:min_len] == word2[:min_len]:
            return ""
        
        for j in range(min_len):
            if word1[j] != word2[j]:
                if word2[j] not in graph[word1[j]]:
                    graph[word1[j]].add(word2[j])
                    in_degree[word2[j]] += 1
                break
    
    # 使用优先队列保证字典序最小
    heap = [char for char in in_degree if in_degree[char] == 0]
    heapq.heapify(heap)
    result = []
    
    while heap:
        char = heapq.heappop(heap)
        result.append(char)
        
        for neighbor in graph[char]:
            in_degree[neighbor] -= 1
            if in_degree[neighbor] == 0:
                heapq.heappush(heap, neighbor)
    
    return ''.join(result) if len(result) == len(in_degree) else ""

算法分析

  • 时间复杂度:O(C),其中 C 是所有单词中字符的总数
  • 空间复杂度:O(1),因为最多只有26个英文字母
  • 核心思想:拓扑排序 + BFS,通过字符间的相对顺序构建有向无环图

测试用例

# 测试代码
words1 = ["wrt", "wrf", "er", "ett", "rftt"]
result1 = alienOrder(words1)
print(f"Example 1: {result1}")  # 输出: "wertf"

words2 = ["z", "x"]
result2 = alienOrder(words2)
print(f"Example 2: {result2}")  # 输出: "zx"

words3 = ["z", "x", "z"]
result3 = alienOrder(words3)
print(f"Example 3: {result3}")  # 输出: "" (无效输入)

面试官看完直接点头:"Great solution! The topological sort approach is optimal."

Candidate 成功拿下这一轮。

这就是 OAVOSERVICE 实时 VO 辅助 的威力:

不是死记硬背题库,而是帮你在最关键的时刻,快速理清思路,稳定发挥,稳稳过关!

面试技巧分享

在 TikTok 的 VO 面试中,除了算法实现,面试官还会关注:

1. 问题建模能力

能够快速识别出这是一道拓扑排序问题,将字符串比较转化为图论问题。

2. 边界条件处理

考虑各种边界情况,如无效输入、环检测、前缀情况等。

3. 代码实现质量

写出清晰、高效的代码,注意变量命名和代码结构。

4. Follow up 思维

能够灵活应对面试官的追问,如字典序最小化等变种问题。

Oavoservice 实时辅助服务

在这次 TikTok VO 面试中,我们的实时辅助系统发挥了关键作用:

  • 快速思路提示:在候选人卡壳时,立即提供拓扑排序的核心思路
  • 算法指导:推荐使用 BFS 来实现拓扑排序算法
  • 代码优化:提供最优的代码实现,确保时间和空间复杂度
  • Follow up 支持:帮助候选人应对字典序最小化等进阶问题

结语

Alien Dictionary 虽然是一道经典题目,但在面试的紧张环境下,能够快速理清思路并正确实现并不容易。这就是为什么我们的实时辅助服务如此重要。

如果你正在准备 TikTok 或其他公司的技术面试,欢迎联系 Oavoservice。我们拥有丰富的面试经验和专业的辅助团队,能够在你最需要的时候提供及时有效的帮助。

Oavoservice - 让每一次面试都成为成功的机会!

需要辅助的同学随时dd哦,vo开始前支持mock!