Redian新闻
>
求帮忙看看哪里有问题!
avatar
求帮忙看看哪里有问题!# JobHunting - 待字闺中
J*3
1
Strstr() using Robin-Karp alg
large case 会有6个过不了。。求大牛帮我看下哪里有问题。
const int base = 26, mod = 997;

char *strStr(char *haystack, char *needle) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int l_h = strlen(haystack);
int l_n = strlen(needle);
if(l_n > l_h) return NULL;

int h_hash = 0, n_hash = 0;
for(int i = 0; i < l_n; i++){
n_hash = (n_hash*base + needle[i])%mod;
h_hash = (h_hash*base + haystack[i])%mod;
}
int j;
for(int i = l_n; i < l_h; i++){
if(n_hash == h_hash){
for(j = 0; j < l_n; j++){
if(haystack[i+j-l_n] != needle[j]){
break;
}
}
return &haystack[i-l_n];
}
h_hash -= (haystack[i - l_n]*static_cast(pow(base, l_n-1)))
%mod;
if(h_hash < 0){
h_hash += mod;
}
h_hash = (h_hash*base + haystack[i])%mod;

}
if(n_hash == h_hash){
for(j = l_h - l_n; j < l_h; j++){
if(haystack[j] != needle[j - (l_h - l_n)]){
break;
}
}
return &haystack[l_h - l_n];
}
return NULL;
}
avatar
J*3
2
发现问题出在这里 static_cast(pow(base, l_n-1)) 这里应该先%mod 一次
这里发现新问题, RK里的变量h 定义就是pow(d, length(pattern) - 1) %q 可我直接
用这个公式就会有问题, 用循环求H到可以全部pass。 求解释
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。