问题描述:编写一个实现通配符匹配的函数pattern_index(),其中通配符取"?",它可以和任一字符匹配成功,例如,pattern_index(“there",”?re")返回的结果是2。
时间复杂度:最好情况是p的第一个字符与t的所有字符均不相同,则比较次数为O(n);最坏情况是每次比较p都要到最后一个字符失败,则总的比较次数为m*(n-m+1),当n足够大时,时间代价为O(n*m)。
程序代码:
int pattern_index(PSeqString t,PSeqString p)
{
int ti,pi;
for(ti = 0;ti <= t->n - p->n);ti++)
{
pi = 0;
while((p->c[pi] == \'?\' || t->c[ti+pi] == p->c[pi]) && pi < p->n)
pi++;
if(pi == p->n)
return ti;
}
return -1;
}