字符串

来源:互联网 发布:华泰证券软件下载 编辑:程序博客网 时间:2024/06/06 00:47

根据以下网站的文章整理:

http://developer.51cto.com/art/201207/347641.htm

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

比如,如果是下面两个字符串:String 1: ABCDEFGHLMNOPQRS                  String 2:DCGSRQPOM

    答案是true,所有在string2里的字母string1也都有。

如果是下面两个字符串:String 3: ABCDEFGHLMNOPQRS                              String 4:DCGSRQPOZ

     答案是false,因为第二个字符串里的Z字母不在第一个字符串里。

【以下分析、代码均默认第一个参数是短的字符串str1,第二个参数是长字符串str2.】

1.最最笨的办法应该是两个for循环。依次取str1(较短的字符串)的每个字符,顺次在str2中搜寻。(代码如下:)

bool fun_1(char *str1,char *str2)

{

char ch;

for(int i=0;i<strlen(str1);i++)

{

ch = str1[i];

for(int j=0;j<strlen(str2);j++)

{

if(ch==str2[j]) continue;

if(j==strlen(str2)) return false;

}

}

return true;}

当然,对于上面的方法可以稍加改进。对str1和str2分别进行去除重复字母的处理。这样,上述的循环次数就会减少,相应的,会增加对两个字符串的处理时间。(在此不再赘述)

2.对于两个字符串进行相同的处理,对字母A - Z赋予素数1,2,3,5...

计算出str1(较长的字符串)的每个字母对应的素数乘积(不计算重复的)sum;

依次取str2(较短的)每个字母对应的素数与sum相除(重复的只计算一次),得出最终的结果为整数,则表示返回结果应为true,否则,为false.(代码略)

原创粉丝点击