【发布时间】:2018-09-18 00:22:05
【问题描述】:
我正在编写一个递归代码,计算我们需要执行的最小操作次数,以便s2 等于s1,有效操作是insert 1 character (di)、delete 1 character (dc) 和dn stays for do nothing
private static int editDistance(String s1, String s2) {
if((s2.isEmpty() && (dn == 0 && dc == 0 && di == 0)) || (s1.isEmpty() && (dn == 0 && dc == 0 && di == 0)))
return Integer.max(s1.length(), s2.length());
if(s2.isEmpty()) {
return 0;
} else if(s1.isEmpty()) {
dc++;
return 1 + editDistance(s1, rest(s2));
} else if(s1.charAt(0) == s2.charAt(0)) {
dn++;
return editDistance(rest(s1), rest(s2));
} else if(s1.charAt(0) != s2.charAt(0) && dc <= di) {
dc++;
return 1 + editDistance(s1, rest(s2));
} else if(s1.charAt(0) != s2.charAt(0) && dc > di) {
di++;
return 1 + editDistance(rest(s1), s2);
}
return 0;
}
例如,如果我们有 s1 = "home" 和 s2 = "hote",将有 1 个删除操作(用于 't')、1 个插入操作('m')和 3 个无操作操作。
问题是我的语句在那些 if/else if 分支中被淘汰了,所以为了编译我的程序,我必须在底部放置一个 return 0 语句,这是没有意义的,我该如何纠正这个问题?
【问题讨论】: