单词与映射解题框架
本节目标
先把空白规范化为单词序列,再用双向映射维护一一对应关系。
这一组题处理两类常见约束:一类需要把不规则空白归一化后重排单词;另一类要求两个符号序列保持一一对应。两者的关键都不是字符串下标本身,而是先抽取正确的逻辑元素,再维护不变量。
识别信号
- 题目把连续空白看作一个分隔符,并要求输出单空格连接的单词序列,先提取单词再处理顺序。
- 两个序列的相对重复模式必须一致,且不同左侧符号不能对应同一个右侧符号,使用双向映射。
- 若字符、单词或标签的单位可以变化,而“对应关系”不变,映射的键和值随之替换即可。
问题模型与核心不变量
空白规范化的结果是一个词序列:忽略首尾空白、折叠中间连续空白;反转后再用单个空格连接。双向映射则同时维护 left -> right 与 right -> left:处理到第 i 对元素前,两张表记录的对应完全一致且互为逆关系。
只检查 left -> right 不够。它能发现同一左侧映射到两个值,却会错误接受 a -> x、b -> x 的多对一关系;反向表正是这一限制的证明。
通用模板
单词:分割或提取有效单词 -> 按题意重排 -> 用单空格连接
映射:检查长度 -> 检查正向一致 -> 检查反向一致 -> 同时写入两张表
其中长度检查和词数检查都应在访问配对元素前完成,避免越界也让失败条件清晰。
模板变体
单词提取可从空白扩展到逗号、路径分隔符或自定义 token。双向映射可以用于字符到字符、模式字符到单词、节点到节点的同构关系。若值域是固定小字符集,双向数组比哈希表更直接;单词等可变字符串则使用哈希映射。
母题序列
建议按必学顺序练习:
常见误区
- 直接按单个空格切分,得到空 token,无法处理首尾或连续空白。
- 反转整个字符数组后没有恢复单词内部顺序。
- 只维护一个方向的映射,漏掉多对一关系。
- 映射冲突后继续覆盖旧值,破坏已经建立的一一对应。
迁移方向
词法切分是解析、日志处理和文本清洗的基础;词序规范化后可继续做词频和窗口问题。双向映射可迁移到模式匹配、结构同构和编码替换;若还需要比较相邻重复关系,可用“上次出现位置”数组作为等价的不变量表达。