public static int Sunday(string text, string pattern)
{
int i, j, m, k;
i = j = 0;
int tl, pl;
int pe;
int rev = -1;
if ((null ==text || null == pattern) || (tl = text.Length) < (pl = pattern.Length))
return -1;
while (i < tl && j < pl)
{
if (text[i] == pattern[j])
{
//匹配正确,就继续
++i;
++j;
continue;
}
//匹配失败
pe = i + pl;
if (pe >= tl) return -1;
for (k = pl - 1; k >= 0 && text[pe] != pattern[k]; --k) {}
i += (pl - k); //(pl - k) 表示i需要移动的步长
rev = i; //记录当前索引
j = 0; //重新开始
}
return i < tl ? rev : -1;
}