原题链接:
poj
题意简述
多组数据。每次给定两个子串。判断第一个字符串是不是第二个字符串的子串(不一定连续的那种,也就是说,第一个字符串能否由第二个字符串删除某些字符得到)。
思路
我 t m tm tm真是傻了,这个暴力题都不会。
设两个字符串是 a , b a,b a,b。枚举 a a a中的位置,在 b b b中查找这个位置。我们有一个显然的结论,这些位置应该是单调递增的,不然 a a a就不是 b b b的子串了,不满足条件。
然后我们枚举 a a a中的位置,然后从上一个匹配到的位置 + 1 +1 +1往后面找。这样的复杂度就是 O ( l e n ( a ) + l e n ( b )

博客介绍了POJ 1936题目的解题思路,内容涉及判断一个字符串是否为另一个字符串的非连续子串问题。通过枚举并利用单调递增性质,实现了O(len(a)+len(b))的时间复杂度解决方案,避免了错误地认为问题为O(len(a)*len(b))而尝试使用FFT等复杂方法。
最低0.47元/天 解锁文章
238

被折叠的 条评论
为什么被折叠?



