动态规划 - 编辑距离 - 两字符串集合重排序
背景
近期遇到一个需求,想要对两个字符串集合进行重排序(对齐)操作,将两个字符串集合中尽可能相同的字符串存放到相同的位置上。
示例
假设有如下两个字符串集合,对两个集合进行重排序操作,由于 ArrayRight[0] 与 ArrayLeft[1] 最相似,那么重排序后的字符串集合中,ArrayLeft[1]应该处于首位。
ArrayLeft : ("班级", "姓名", "年级", "生日")
ArrayRight: ("学生姓名", "学生生日")
方案
第一种方案考虑对两个字符串集合求并集,然后将差异的部分进行添加,这种方案要求在集合中的字符串完全相等,但是某些业务场景下,同一个物体的描述可能有细微的差别,这种情况下此方案略显不足。
第二种方案考虑将编辑距离引入进行计算,对两个字符串集合进行双层循环,将字符串集合间的问题转换为字符串间的问题,这种方案解决了第一种方案的弊端。
执行效果
将如上的 ArrayLeft、ArrayRight 进行输入, 对左侧的字符串集合进行重排序,输出的结果为: ("姓名", "生日", "班级", "年级")。
算法
其中 DistanceUtiil.editDistance 就是常见的 编辑距离的实现,本文不做详细介绍,可以单独进行搜索。
复制代码
参考
版权声明: 本文为 InfoQ 作者【alexgaoyh】的原创文章。
原文链接:【http://xie.infoq.cn/article/12cc5bcde1dc58ac49813fa48】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论