例如 src = "ab1dkj2ksj32g1e32ks1iji2sk1ks13ab;iksaj12s23";
des = “123”,在src中找出含有“123”的最短字串。
void MinSubString( char *src, char *des )
{
char *q,*p,*f;
p = des;
f = NULL;
int len = strlen(des);
int hash[256] = {0};
int cnt[256] = {0};
for(;*p!='\0';p++)
{
hash[*p]++;
}
q = p = src;
int i,min,count;
min = 65536;
count = 0;
while(*p != '\0')
{
if(hash[*p] == 1)
{
if(cnt[*p] == 0)
{
count++;
cnt[*p]++;
if(count == len)
{
while( *q != '\0')
{
if(hash[*q] == 1)
{
cnt[*q]--;
if(cnt[*q] == 0)
break;
}
q++;
}
if(min > p - q)
{
min = p - q;
f = q;
}
count--;
q++;
}
}
else
{
cnt[*p]++;
}
}
p++;
}
printf("最短字串是:\n");
for(i=0;i<=min;i++,f++)
printf("%c ",*f);
}