Java 达到字符串的最小替换数:01010101。。。01或10101010。。。10

Java 达到字符串的最小替换数:01010101。。。01或10101010。。。10,java,Java,给定一个二进制字符串,即它只包含0和1(0的数量等于1的数量),我们需要通过交换一些位使这个字符串成为一个交替字符序列,我们的目标是最小化交换的数量 例如,对于字符串“0001011”,交换的最小数量为2,一种方法是: 1) 交换位:0001011-->00010111 2) 交换位(第一次交换后):00010111-->01010101 请注意,如果给我们字符串“00101011”,我们可以将其转换为以0开头的备用字符串(需要3次交换),也可以转换为以1开头的备用字符串(需要一次交换-第一位和

给定一个二进制字符串,即它只包含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()];                           
}