先 说 一 下 O ( n 2 ) 的 做 法 先说一下O(n^2)的做法 先说一下O(n2)的做法
从 前 往 后 匹 配 从前往后匹配 从前往后匹配
当 前 字 母 较 小 时 , b r e a k , 成 功 \color{Green}{当前字母较小时,break,成功} 当前字母较小时,break,成功
当 前 字 母 相 等 时 , 去 后 面 找 一 个 更 小 的 字 母 \color{Red}当前字母相等时,去后面找一个更小的字母 当前字母相等时,去后面找一个更小的字母
找 到 就 成 功 , 找 不 到 就 算 了 \color{Red}找到就成功,找不到就算了 找到就成功,找不到就算了
当 前 字 母 较 大 时 , 一 定 要 去 后 面 找 更 小 的 字 母 \color{orange}当前字母较大时,一定要去后面找更小的字母 当前字母较大时,一定要去后面找更小的字母
找 到 更 小 的 就 成 功 , 只 能 找 到 相 等 的 就 标 记 已 经 找 过 字 母 找到更小的就成功,只能找到相等的就标记已经找过字母 找到更小的就成功,只能找到相等的就标记已经找过字母
下 次 匹 配 时 不 进 行 替 换 字 母 的 尝 试 下次匹配时不进行替换字母的尝试 下次匹配时不进行替换字母的尝试
当 然 可 以 通 过 预 处 理 后 i 字 母 中 最 小 字 母 降 低 复 杂 度 当然可以通过预处理后i字母中最小字母降低复杂度 当然可以通过预处理后i字母中最小字母降低复杂度
还 有 O ( n l o g ( n ) ) 的 \color{Red}{还有O(nlog(n))}的 还有O(nlog(n))的
对 a 串 排 序 , 排 序 后 为 b 串 对a串排序,排序后为b串 对a串排序,排序后为b串
然 后 找 到 a 和 b 第 一 个 不 相 等 的 位 置 然后找到a和b第一个不相等的位置 然后找到a和b第一个不相等的位置
然 后 提 示 我 们 应 该 在 这 个 位 置 放 b 串 的 字 母 然后提示我们应该在这个位置放b串的字母 然后提示我们应该在这个位置放b串的字母
于 是 去 后 面 找 的 这 个 字 母 的 索 引 , 交 换 . 于是去后面找的这个字母的索引,交换. 于是去后面找的这个字母的索引,交换.
这 样 就 得 到 了 理 论 最 小 的 串 a , 再 和 目 标 串 比 较 . 这样就得到了理论最小的串a,再和目标串比较. 这样就得到了理论最小的串a,再和目标串比较.