串的顺序存储结构-KMP匹配算法-计算位置
//KMP匹配方法
public int Index(StringList T, int pos = 1) {
    if (this.isEmpty() || T.isEmpty()) {
        return 0;
    }

    int mainLength = this.Length();
    int matchLength = T.Length();
    int i = 1;
    int j = 0;
    if (pos > 0 && pos <= mainLength) {
        i = pos;
        int[] nextval = new int[matchLength + 1];
        this.getNextval(T, nextval);
        for (; i <= mainLength; i++)
        {
            while (j > 0 && this[i] != T[j + 1])
            {
                j = nextval[j];
            }

            if (this[i] == T[j + 1])
            {
                j++;
            }

            if (j == matchLength)
            {
                return i - matchLength + 1;
            }
        }
    }
    return 0;
}


和计算nextvalue数组的方法差不多,就是使用两个指标,主串指标和匹配串指标,将主串指标位置的字符和匹配串指标位置的字符对比,如果相同,就都往后移动一位,如果不相同,匹配串就根据nextvalue的数组回到合适的位置再和主串对比。


首页 我的博客
粤ICP备17103704号