0001 int match(char* T, int n, char* P, int m) { //Boyer-Moore算法(简化版) 0002 int i = m-1, j = m-1; //当前字符位置 0003 int* bc = new int[128]; buildBC(P, m, bc); //只采用BC策略 0004 while ((0 <= j) && (i-j <= n-m)) //自后向前逐个比对字符 0005 if (T[i] == P[j]) //若匹配 0006 { i--; j--; } //则转到前一对字符 0007 else //否则 0008 { i += m-1 - min(bc[T[i]], j-1); j = m-1; } //借助BC表右移 0009 delete[] bc; return i-j; //销毁BC表,返回最终的对齐位置 0010 } //BM: BC