我找到了老师的工作。 我需要获得两个字符串str1和str2,并在最小的操作中将str1引入str2。 我能够编写一个代码并且它工作得很好,但根据老师的要求,我并没有真正成功。 他希望方法调用“public static int edit(String str1,String str2)”
我做的方法是: public static int edit(String str1,String str2,int m,int n)
我不能想到没有使用m和n的解决方案,我很乐意提供帮助。
public static int min(int x,int y,int z)
{
if (x<=y && x<=z) return x;
if (y<=x && y<=z) return y;
else return z;
}
static int edit(String str1 , String str2)
{
// If first string is empty, the only option is to
// insert all characters of second string into first
if (str1.length() == 0) return str1.length();
// If second string is empty, the only option is to
// remove all characters of first string
if (str1.length()-1 == 0) return str1.length();
// If last characters of two strings are same, nothing
// much to do. Ignore last characters and get count for
// remaining strings.
if (str1.charAt(str1.length()-1) == str2.charAt(str2.length()-1))
return edit(str1, str2, str1.length, str2.length());
// If last characters are not same, consider all three
// operations on last character of first string, recursively
// compute minimum cost for all three operations and take
// minimum of three values.
return 1 + min ( edit(str1, str2, str1.length, str2.length()-1), // Insert
edit(str1, str2, str1.length-1, str2.length()), // Remove
edit(str1, str2, str1.length-1, str2.length()-1) // Replace
);
}
答案 0 :(得分:0)
为什么不写一个新方法?
public static int edit(String str1, String str2) {
return edit(str1, str2, str1.length(), str2.length());
}
这有时被称为驱动程序方法。