- 论坛徽章:
- 0
|
用Rabin-Karp算法,但是那个公式可以改改,原理是一样的,时间复杂度是O(N),也就是线性扫描的时间,空间复杂度嘛,O(1),常数附加空间。
顺手写了一个仅供参考,没有仔细验过,但是大概意思是那样吧,每次都获取三个char构成的12位整数值,若等于1就可以得到第一个满足条件的了,没找到返回-1。
int find001(char* str,int len)
{
if (len<3) return -1;
int i,s=(str[0]<<4)+str[1];
for (i=2;i<len;i++)
{
s=((s&(0xffff))<<4)+str[i];
if (s==1) break;
}
if (i==len) return -1;
else return i-2;
} |
|
|