首页 > 解决方案 > 在 Java 中计算字符串的 1 和 0,并将它们按顺序排列?

问题描述

我确实有一个大问题,编码应该很容易:

我需要创建一个静态公共方法,它返回一个字符串并以字符串的形式获取二进制数。

public static String encode(String a) {

此方法必须计算连续的零和一。如果数字发生变化,则必须为空白。此外,如果第一个数字不是零,程序只需写一个零作为第一个数字。

Example: 11100110111 => "0 3 2 2 1 3"

Other Examples are:
encode("0") --> "1" 
encode("000") --> "3" 
encode("11") --> "0 2" 
encode("011") --> "1 2" 
encode("101") --> "0 1 1 1" 

我不知道如何做到这一点,如果有人可以提供帮助,那就太好了!我将在这里发布我毫无价值的代码,它无用但最终包含一些有用的信息!

public class Functionality {
    public static void main(String[] args) {
        System.out.println(encode("111"));

    }

    public static String encode(String a) {
        int z = 0;
        int v = 0;
        String erg = "";

        while (a.length() == 0) {

            while (v == ErsterWert(a)) {
                z = z + 1;
                subt(a);

            }

            String zx = String.valueOf(z);
            erg = erg + zx + " ";
            if (v == 0) {
                v = v + 1;
            }

            if (v == 1) {
                v = 0;
            }

            z = 0;

        }
        String bg = "sds";
        return erg;
    }

    public static int ErsterWert(String a) {
        int f = a.charAt(0);
        return f;
    }

    public static String subt(String a) {
        a = a.substring(1);
        return a;
    }

}

标签: javastringbinaryencode

解决方案


使用字符串函数的递归解决方案indexOfsubstring可能如下所示:

  • 我们尝试在字符串的开头找到一个数字 X 的位置来计算前缀的长度。
public static String encode(String str) {
    if (str.startsWith("1")) {
        // append 0 at start, look for 0 after 1's
        return "0 " + encode(str, 0);
    }
    // string starts with 0, look for the first 1 after 0's
    return encode(str, 1);
}

// d - the digit to look for after current prefix 
public static String encode(String z, int d) {
    int pos = z.indexOf(String.valueOf(d));
    if (pos == -1) { // nothing found after current prefix
        return String.valueOf(z.length());
    }
    // append prefix length and toggle the number to look for
    return String.valueOf(pos) + " " + encode(z.substring(pos), 1 - d);
}

测试:

for (String s : Arrays.asList("0", "1", "000", "11", "011", "101", "0011100001111100")) {
    System.out.println(s + " -> " + encode(s));
}

输出:

0 -> 1
1 -> 0 1
000 -> 3
11 -> 0 2
011 -> 1 2
101 -> 0 1 1 1
0011100001111100 -> 2 3 4 5 2

推荐阅读