您的位置:首页 > 其它

字符串查找问题

2014-10-21 20:47 155 查看
原问题与解答是在网上看到的,但是忘记网址了,这里自己重新大概说一遍。

假设字符串 A: abcjsjdefsg

字符串B : bkbgdsgs

如何判断字符串B的每个字符在A中是否都出现?

像上面的话,由于B的k字符不在A串内,所以是肯定不行的,所以就返回false

如果B是bsbgdsgs的话,那么B的所有字符都在A里面可以找到,那么就返回True了

这里有比较传统的做法,第一个做法是哈希的做法

对A中的字符串的每个字符都进行哈希等到整数值,然后B中的也这样做,这样就可以判断是否找到了,这样的时间复杂度是O(m+n)

另外一种做法是素数的方法

将A中的每个不同字符都对应一个素数,然后将A中的每个字符对应的素数相乘,这样就得到一个整数,然后再用这个整数去除B中的每个字符对应的素数,然后出现余数了,那么就可以返回False了,如果到底也没有余数,那么就返回True了,这样的复杂度是时间O(m+n)

还有一种做法,但是前提是字符都是ascii值

申请256个bit,然后对应每个A中的每个字符都是可以映射到一个bit,将其置1.例如'a'的ascii值就是96,那么在96这个位置上将其置1,相同的可以不管。到B时就可以对其每个字符进行判断了,这样的时间复杂度也是O(m+n),但是占用的空间就是O(1)了。

这种方法是有字符大小的限制的, 或者也可以申请为unicode的范围大小,对于字符串先转为unicode的值,然后再利用上面的匹配,这样应该也是可以的,而且就不用考虑字符串里面字符的限制了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: