OA辅助 / 面试训练复盘

Verily OA 面试真题解析:Function Name Normalization 字符串映射

给定一组变量到模板字符串的映射,求某个变量的最终展开结果。用递归逐字符展开映射值,遇到未定义的字符原样保留,并用访问集合检测循环依赖。

模板映射,递归展开:映射表、递归展开、循环检测。原创主题示意图。
训练主题配图 · 非客户现场证明

题目描述

给定映射表,例如 {'x': '%y%', 'y': '%z%_abc', 'z': 'abc'},求 function('x') 的最终输出。规则是把变量的值当作模板,模板里出现的变量继续展开,直到全部变成字面量。

解题思路

把每个值当模板逐字符扫描:遇到映射表里存在的键就递归展开,否则原样输出。用 memo 缓存展开结果,用 visiting 集合检测循环依赖(如 x -> y -> x)。展开完成后写入 memo,避免重复计算。

def evaluate(name, mapping):
    memo = {}
    visiting = set()

    def expand(x):
        if x in memo:
            return memo[x]
        if x in visiting:
            raise ValueError("cycle detected")
        if x not in mapping:
            return x
        visiting.add(x)
        out = ""
        for ch in mapping[x]:
            out += expand(ch)
        visiting.discard(x)
        memo[x] = out
        return out

    return expand(name)

复杂度与易错点

每个变量展开一次,总复杂度 O(展开结果长度)。占位符的语法(如 %y% 里的 % 是字面量还是分隔符)要以题面为准,但「递归展开 + 循环检测」的骨架不变。漏掉循环检测会无限递归。

FAQ

为什么需要 visiting 集合,只靠 memo 不够吗?

memo 只在展开完成后才写入,递归进行中的变量还不在 memo 里;visiting 记录当前递归路径,才能识别 x -> y -> x 这类环。

参考来源

联系 VOPathway

如果你希望把这套方法用于自己的 OA 或 VO 准备,可以把目标岗位、当前阶段、面试时间和主要难点发给 VOPathway,我们会据此安排针对性的练习与复盘。

  • 微信:Coding0201
  • 邮箱:[email protected]
  • Telegram:@OAVOProxy
  • WhatsApp:+86 178 6396 8105

可提供 OA辅助、OA辅导、VO辅助与 VO辅导。文章用于训练参考,不代表相关公司的官方流程;实际安排请以候选人收到的通知为准。

每一步,都更接近准备充分的自己。

本文用于面试准备与训练复盘。公司名称仅用于标识题型素材主题,不代表官方合作或录用承诺。

预约一次训练复盘 ↗