字符串问题

假设这有一个各种字母组成的字符串,假设这还有另外一个字符串,而且这个字符串里的字母数相对少一些。从算法上讲,什么方法能最快的查出所有小字符串里的字母在大字符串里都有?

  比如,如果是下面两个字符串:

  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),但是思维却大不相同。如果说我所能想到的算法,只要研究过算法的人基本上可以想到的话,那么素数这种算法,却是.............

posted @ 2012-11-23 16:28  紫忆  阅读(200)  评论(0编辑  收藏  举报