Substring Search
Substring Search 方法
Rabin-Karp Substring Search: O(n + m)
// String A, String B
int PRIME = 31;
int BASE = 1000000;
int aHash = 0;
for(int i = 0; i < A.length(); i++) {
aHash = (aHash * PRIME + A.charAt(i)) % BASE;
if(aHash < 0) {
aHash += BASE;
}
}
int power = 1;
for(int i = 0; i < A.length(); i++) {
power = (power * PRIME) % BASE;
}
int bHash = 0;
for(int i = 0; i < B.length(); i++) {
bHash = (bHash * PRIME + B.charAt(i)) % BASE;
if(i < A.length() - 1) continue;
if(i >= A.length()) {
bHash = (bHash - power * B.charAt(i - A.length())) % BASE;
if(bHash < 0) {
bHash += BASE;
}
}
if(aHash == bHash && A.equals(B.substring(i - A.length() + 1,i + 1))) {
...
}
}Last updated