diff --git a/KMP.java b/KMP.java new file mode 100644 index 0000000..f9f56a9 --- /dev/null +++ b/KMP.java @@ -0,0 +1,72 @@ +public class KMP { + + public boolean hasSubstring(char[] text, char[] pattern){ + int i=0; + int j=0; + int k = 0; + while(i < text.length && j < pattern.length){ + if(text[i] == pattern[j]){ + i++; + j++; + }else{ + j=0; + k++; + i = k; + } + } + if(j == pattern.length){ + return true; + } + return false; + } + private int[] computeTemporaryArray(char pattern[]){ + int [] lps = new int[pattern.length]; + int index =0; + for(int i=1; i < pattern.length;){ + if(pattern[i] == pattern[index]){ + lps[i] = index + 1; + index++; + i++; + }else{ + if(index != 0){ + index = lps[index-1]; + }else{ + lps[i] =0; + i++; + } + } + } + return lps; + } + public boolean KMP(char []text, char []pattern){ + int lps[] = computeTemporaryArray(pattern); + int i=0; + int j=0; + while(i < text.length && j < pattern.length){ + if(text[i] == pattern[j]){ + i++; + j++; + }else{ + if(j!=0){ + j = lps[j-1]; + }else{ + i++; + } + } + } + if(j == pattern.length){ + return true; + } + return false; + } + + public static void main(String args[]){ + + String str = "abcxabcdabcdabcy"; + String subString = "abcdabcy"; + KMP ss = new KMP(); + boolean result = ss.KMP(str.toCharArray(), subString.toCharArray()); + System.out.print(result); + + } +} \ No newline at end of file