package com.stringtest;
public class StringSearch {
String str;
public StringSearch(String str){
this.str =str;
}
public int rabinKarp(String sub){
int count =-1;
int hsub = stringHash(sub);
int m = sub.length();
int n = this.str.length();
int hs = stringHash(this.str.substring(0,m));
for(int index=0;index<n-m-1;index++){
if(hs==hsub){
if(this.str.substring(index,index+m).equals(sub)){
return index;
}
}
hs=rollingHash(this.str,index,index+m+1,hs);
}
return -1;
}
/**
* zero based index.
* @param strarg
* @param start
* @param end
* @param hash
* @return
*/
private int rollingHash(String strarg,int start,int end,int hash){
return hash-strarg.charAt(start)+strarg.charAt(end);
}
private int stringHash(String strarg){
int hashvalue=0;
for(int index=0;index<strarg.length();index++){
hashvalue +=strarg.charAt(index);
}
return hashvalue;
}
}