KMP prefix table

前端 未结 7 1055
说谎
说谎 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:26

    This code may not be the shortest, but easy to understand flow of code. Simple Java Code for calculating prefix-Array-

        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) {
            System.out.println(prefixArray[k]);
        }
    

    It produces the required output-

    0 0 1 2 3 0 1

提交回复
热议问题