Java 达到字符串的最小替换数:01010101。。。01或10101010。。。10
给定一个二进制字符串,即它只包含0和1(0的数量等于1的数量),我们需要通过交换一些位使这个字符串成为一个交替字符序列,我们的目标是最小化交换的数量 例如,对于字符串“0001011”,交换的最小数量为2,一种方法是: 1) 交换位:0001011-->00010111 2) 交换位(第一次交换后):00010111-->01010101 请注意,如果给我们字符串“00101011”,我们可以将其转换为以0开头的备用字符串(需要3次交换),也可以转换为以1开头的备用字符串(需要一次交换-第一位和最后一位)。 因此,这种情况下的最小值是一次交换Java 达到字符串的最小替换数:01010101。。。01或10101010。。。10,java,Java,给定一个二进制字符串,即它只包含0和1(0的数量等于1的数量),我们需要通过交换一些位使这个字符串成为一个交替字符序列,我们的目标是最小化交换的数量 例如,对于字符串“0001011”,交换的最小数量为2,一种方法是: 1) 交换位:0001011-->00010111 2) 交换位(第一次交换后):00010111-->01010101 请注意,如果给我们字符串“00101011”,我们可以将其转换为以0开头的备用字符串(需要3次交换),也可以转换为以1开头的备用字符串(需要一次交换-第一位和
最终目标是返回给定字符串1和0的最小交换次数。解决这个问题最有效的方法是什么?您正在寻找的被称为。它有点复杂,因为它适用于所有类型的字符串,不仅仅是位字符串,而且基于实现,您应该能够开发自己的拟合解决方案。下面是我在上找到的一个java实现:
publicstaticintcomputelevenshteindication(charsequencelhs,charsequencerhs){
int[][]距离=新int[lhs.length()+1][rhs.length()+1];
对于(int i=0;我首先尝试写一些你自己的代码,这里没有人会为你写家庭作业,如果你在尝试和做你自己的研究后有任何问题,那么就带一些代码来这里向我们展示。至于Java字符串中的字符串长度有返回字符串中字符数的方法长度。我建议一步一步来。First编写代码,确定两个选项的更改数量。然后思考如何在一次过程中完成此操作。除非我搞错了日志(n)这是不可能的-你必须检查现有字符串中的每一位-如果不至少处理每个条目一次,就无法确定最终结果。但也许我错了,其他人有更好的想法。老师说我不能只在字符、长度和私有方法中使用字符串方法。我已经坐了两个小时了在这个练习中,我找不到一个好的算法,至少你会给我一个解决方案的方向,我不要求问题的解决方案嘿,这个演讲叫做交替顺序我不明白你的评论。你想告诉我什么?
public static int computeLevenshteinDistance(CharSequence lhs, CharSequence rhs) {
int[][] distance = new int[lhs.length() + 1][rhs.length() + 1];
for (int i = 0; i <= lhs.length(); i++)
distance[i][0] = i;
for (int j = 1; j <= rhs.length(); j++)
distance[0][j] = j;
for (int i = 1; i <= lhs.length(); i++)
for (int j = 1; j <= rhs.length(); j++)
distance[i][j] = minimum(
distance[i - 1][j] + 1,
distance[i][j - 1] + 1,
distance[i - 1][j - 1] + ((lhs.charAt(i - 1) == rhs.charAt(j - 1)) ? 0 : 1));
return distance[lhs.length()][rhs.length()];
}