题目重点:把逐级加规则的 KYC 题拆成可靠的 CSV 解析、字段验证、文本归一化与可解释的错误判定。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练版以六列 business_name、business_profile_name、full_statement_descriptor、short_statement_descriptor、url、product_description 为输入;具体列次以现场题面为准。
- CSV 采用标准引号转义,空白字符串 trim 后视作缺失;full descriptor 长度 5–31(含端点),按 Unicode 字符数还是字节数现场确认。
- 禁用词采用 case-insensitive 整词短语匹配;另一版本的词重合先去大小写、标点及 LLC/Inc 后缀。两版本为不同追问,不强行串成固定四段。
解题路线
- 先用成熟 CSV parser 得到行和列,检查列数与缺失值;不要用 split(',') 破坏带引号逗号的公司名。
- 把字段必填、长度、禁用词、词重合写成独立纯函数。每段升级只增加规则,不改变前段已经通过的定义;若题目要错误码,先和面试官确定优先级与一行多错的输出。
- 禁用词先统一大小写与空白,再按题目指定的整词/子串/wildcard 语义匹配。简单 substring 会把 SHOP 匹配进 WORKSHOP,除非正式规则允许。
- 词重合计算 descriptor 与 business_name/profile_name 的 token 集,分母究竟是 descriptor 词数、商户词数还是并集必须确认。训练版取 descriptor 有效词数,满足交集数×2≥有效词数;空集合不通过。
- 用逐级测试锁定行为:缺列、空白、5/31/32 长度、大小写、引号逗号、禁词位于词中、LLC/Inc、恰好 50% 重合、同一行多错。
手动走一遍
训练例:business_name='Pawsome Pets Inc.',descriptor='Pawsome Pets',有效词为 {pawsome,pets},重合 2/2,通过。若 descriptor='Online Store',即使长度合法,也在含通用词禁用版被拒;在另一个只检查重合的版本也因 0/2 被拒。两种拒绝理由不能混写成同一原题错误码。
规模与取舍
R 行、总字符数 C、禁词表 B 时,解析与基础检查 O(C);朴素扫描禁词近似 O(CB),预编译短语索引可降常数;词集合 O(C) 时间及 O(C) 空间。CSV 的 quoted newline 使逐物理行 split 不可靠。
易错点与追问
容易失分的边界
- 把公司字段数写成所有题目共同固定 schema。
- 把仅在一版提到的 wildcard、错误码排序或非法国家说成这道 KYC 的确定原题。
- 用子串匹配禁用词产生误杀,或只按空字符串而不按 trim 处理空白。
- 两个版本的词重合分母不一致,却让同一测试套无条件通用。
继续深挖
- 若错误码最多输出两个,如何定义并测试确定优先级?
- 词语包含 Unicode、连字符或网址时如何 token 化?
- CSV 非法引号、重复行和超大文件怎样报告而不把 parse error 当作 KYC fail?
