字符串问题
假设这有一个各种字母组成的字符串,假设这还有另外一个字符串,而且这个字符串里的字母数相对少一些。从算法上讲,什么方法能最快的查出所有小字符串里的字母在大字符串里都有?
比如,如果是下面两个字符串:
String 1: ABCDEFGHLMNOPQRS
String 2: DCGSRQPOM
答案是true,所有在string2里的字母string1也都有。如果是下面两个字符串:
String 1: ABCDEFGHLMNOPQRS
String 2: DCGSRQPOZ
答案是false,因为第二个字符串里的Z字母不在第一个字符串里。
一看到这题,我首先排除直接拿string2里的字符去和string1的比较。4秒中想出的算法是,对string1和string2排序后比较,时间复杂度0(nlongn+mlongm+m+n).再一想(10s),可以将string1中有的字母用数组装起来(比如A下标为1,B下标为2.........)赋值为1,然后再将string2的字母转换为下标后判断是否为1,时间复杂度为O(m+n).这是我目前所能想到的最好的算法了。可是令我没有想到的是,还有一种打破我现有思维的算法:
将string1的字符用素数标记,(比如A为2,B为3,C为5..............)然后相乘,在对string2中的字符取余,若是有余数,则输出false,没有则输出true.
虽然时间复杂度也是 O(n+m),但是思维却大不相同。如果说我所能想到的算法,只要研究过算法的人基本上可以想到的话,那么素数这种算法,却是.............
朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。