我指的是Rabin Karp算法的代码。但是在while循环中,它给出了一个错误
从double到int的转换可能有损耗。有人能帮我解决这个错误吗?
import java.util.Scanner;
public class Main {
static boolean rabinKarp(String text, String pattern) {
int pLength= pattern.length();
int n=pLength-1;
int res=0, curr=0;
int i=0;
for(;i<pLength;i++)
res+= (pattern.charAt(i)-'a'+1)*Math.pow(10,n--);
n=pLength-1;
for(i=0;i<pLength;i++)
curr+= (text.charAt(i)-'a'+1)*Math.pow(10,n--);
if(res==curr)
return true;
n=pLength-1;
while(i<text.length()){
int p= Math.pow(10,n);
int sub= (text.charAt(i-pLength)-'a'+1)*p;
int add= (text.charAt(i)-'a'+1);
curr= (curr-sub)*10+add;
if(res==curr)
return true;
i++;
}
return false;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String text = "abcbab";
String pattern = "bab";
System.out.println(rabinKarp(text,pattern));
}
}
1条答案
按热度按时间ccrfmcuu1#
Math中power方法会给予你一个double,你必须手动地转换它:
int p= (int) Math.pow(10,n);
另请参见Calculating powers of integers