poj 1936 题解 (字符串)

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

原题链接:
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 )

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值