例如 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);
}
本文介绍了一种用于从源字符串中找出包含指定目标字符串所有字符的最短子串的算法实现。通过构建哈希表记录目标字符串中各字符出现次数,并遍历源字符串进行匹配与比较,最终定位到符合条件的最短子串。
881

被折叠的 条评论
为什么被折叠?



