티스토리 뷰

카테고리 없음

KMP 알고리즘 Java 코드

더블제로스톤 2016. 11. 9. 08:00

Java code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.util.*;
 
public class KMP {
    int[] getPi(String p){
        int n = p.length();
        int j=0;
        int[] pi = new int[n];
        for(int i=1; i<n; i++){
            while(j > 0 && p.charAt(i) != p.charAt(j)) j = pi[j-1];
            if(p.charAt(i) == p.charAt(j)) pi[i] = ++j;
        }
        return pi;
    }
    
    ArrayList<Integer> kmp(String s, String p){
        ArrayList<Integer> ret = new ArrayList<>();
        int[] pi = getPi(p);
        int n = s.length();
        int m = p.length();
        int j = 0;
        for(int i=0; i<n; i++){
            while(j>0 && s.charAt(i) != p.charAt(j)) j = pi[j-1];
            if(s.charAt(i) == p.charAt(j)){
                if(j == m-1){
                    ret.add(i-m+1);
                    j = pi[j];
                }else{
                    j++;
                }
            }
        }
        return ret;
    }
}
cs


참고

http://bowbowbow.tistory.com/6

댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Total
Today
Yesterday
글 보관함