字符串

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

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.(代码略)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值