多串匹配的问题,如果我们转化成单字符串匹配找子序列的问题的话,对于每一个在输入集合里的字符串,我们都要尝试和主串匹配。这样的话时间复杂度为O((m + n) * k),n为主串长度,m为所有要匹配串的平均长度,k为待匹配串的数量。时间复杂度显然不理想。
如果我们尝试一次性匹配多个串的话,比如我们扫过主串的第一个字符为a,那么所有待匹配串如果第一个字符也为a,那么对应的指针也向后移动一位,那么下一个待匹配的字符就变为第二个字符。所有我们需要一个map来维护所有待匹配串的当前匹配的状态,也就是第几位是待匹配的,那么我们每次扫过主串当前的字符c,所有待匹配字符为c的串都可以匹配,然后更新下一个待匹配的字符,如果到了末尾说明当前已匹配串是主串的一个子序列,更新结果即可。时间复杂度O(n + m * k),空间复杂度O(m * k),代码如下:
No comments:
Post a Comment