跳到主要内容

单词与映射解题框架

本节目标

先把空白规范化为单词序列,再用双向映射维护一一对应关系。

这一组题处理两类常见约束:一类需要把不规则空白归一化后重排单词;另一类要求两个符号序列保持一一对应。两者的关键都不是字符串下标本身,而是先抽取正确的逻辑元素,再维护不变量。

识别信号

  • 题目把连续空白看作一个分隔符,并要求输出单空格连接的单词序列,先提取单词再处理顺序。
  • 两个序列的相对重复模式必须一致,且不同左侧符号不能对应同一个右侧符号,使用双向映射。
  • 若字符、单词或标签的单位可以变化,而“对应关系”不变,映射的键和值随之替换即可。

问题模型与核心不变量

空白规范化的结果是一个词序列:忽略首尾空白、折叠中间连续空白;反转后再用单个空格连接。双向映射则同时维护 left -> rightright -> left:处理到第 i 对元素前,两张表记录的对应完全一致且互为逆关系。

只检查 left -> right 不够。它能发现同一左侧映射到两个值,却会错误接受 a -> xb -> x 的多对一关系;反向表正是这一限制的证明。

通用模板

单词:分割或提取有效单词 -> 按题意重排 -> 用单空格连接
映射:检查长度 -> 检查正向一致 -> 检查反向一致 -> 同时写入两张表

其中长度检查和词数检查都应在访问配对元素前完成,避免越界也让失败条件清晰。

模板变体

单词提取可从空白扩展到逗号、路径分隔符或自定义 token。双向映射可以用于字符到字符、模式字符到单词、节点到节点的同构关系。若值域是固定小字符集,双向数组比哈希表更直接;单词等可变字符串则使用哈希映射。

母题序列

建议按必学顺序练习:

  1. 反转字符串中的单词:先规范化空白并提取单词,再逆序和连接。
  2. 同构字符串:为字符对维护互为逆的两张映射表。
  3. 单词规律:将字符同构推广到模式符号与单词的配对。

常见误区

  • 直接按单个空格切分,得到空 token,无法处理首尾或连续空白。
  • 反转整个字符数组后没有恢复单词内部顺序。
  • 只维护一个方向的映射,漏掉多对一关系。
  • 映射冲突后继续覆盖旧值,破坏已经建立的一一对应。

迁移方向

词法切分是解析、日志处理和文本清洗的基础;词序规范化后可继续做词频和窗口问题。双向映射可迁移到模式匹配、结构同构和编码替换;若还需要比较相邻重复关系,可用“上次出现位置”数组作为等价的不变量表达。