KMP prefix table

前端 未结 7 1065
说谎
说谎 2020-12-02 07:58

I am reading about KMP for string matching.
It needs a preprocessing of the pattern by building a prefix table.
For example for the string ababaca

7条回答
  •  难免孤独
    2020-12-02 08:27

    String pattern = "ababaca";

    int i = 1, j = 0;
    
    int[] prefixArray = new int[pattern.length];
    
    while (i < pattern.length) {
    
        while (pattern.charAt(i) != pattern.charAt(j) && j > 0) {
            j = prefixArray[j - 1];
    
        }
    
        if (pattern.charAt(i) == pattern.charAt(j)) {
            prefixArray[i] = j + 1;
            i++;
            j++;
    
        } else {
            prefixArray[i] = j;
            i++;
        }
    }
    
    for (int k = 0; k < prefixArray.length; ++k) {
        cout<< prefixArray[k]<< endl;
    }
    

提交回复
热议问题