字符串集合中相互包含关系算法
先介绍下使用场景,源文件是一个excel表格,要根据某一列的值生成正则表达式,为保证正则表达式的准确性,被包含的数据肯定是不能直接生成正则表达式的,例如,产科和妇产科,如果直接生成正则表达式,那么所有妇产科应该匹配到的字符串都能被产科所匹配到,所以将需要实现一种算法,能对整个字符串数组进行相互包含关系的校验
python实现
备选算法:
- 简单遍历
- 先按长度排序再遍历
- 先合并成一个字符串
简单遍历
介绍:
这种介绍起来最简单,就简单的对字符串数组进行遍历,判断当前字符串A是否与其后面的任意字符串存在包含关系(双向判断),长度短的肯定不能包含长度更长的,所以使用判断一次就好,另外,由于是双向判断,所以每次只用比较位于其后的即可
优点:
实现简单
缺点:
慢,特别慢,字符串数量越多,效率阶乘降低
先按长度排序再遍历
介绍:
按长度排序或者叫做按长度分类更合适,根据字符串长度,将源字符串集合分成若干集合,预先需要确定所有数据不重复,然后我们就可以遍历长度较短的数据集合,判断是否被长度更长的集合里的数据所包含
优点:
比简单遍历略快,就是把所有的双向判断部分优化了,每次都判断哪个长度更长无疑是比较浪费时间的
缺点:
还是不够快,效率很大长度取决于数据长度的分布,比如只有长度为2和长度为3的数据,那只用判断2里面的数据是否被3里面的数据包含即可