根据条件将字符串转换为字符串

时间:2019-03-12 17:11:29

标签: java arrays string

作为输入,我有一个仅包含“ 0”的字符串对象。

输入String word = "00000"的示例。

问题是将此字符串转换为另一个字符串作为输出。

转换是在某些特定位置将“ 0”替换为“ 1”,结果每个“ 0”与至少一个“ 1”相邻。

一些例子:

input     |    output
0000          0101
00000         01001
000000        010010
0000000       0100101
00000000      01001010

我们可以看到,输出满足条件,每个'0'与至少一个'1'相邻。

第二个条件是我们必须使用最小数字“ 1”。

经过一些工作,我意识到我们可以知道应该替换0值的最小数字“ 1”。

该公式由getMinNumber(String word)方法表示。

这就是我所做的。

  public class TestUtilities {

    public static void main( String[] args ) {

        String [] words ={"0000","00000","000000","0000000"} ;
        for (String str :words) {
            System.out.println(transform(str));
        }
    }
    private static String  transform( String word ) {
        int min =  getMinNumber(word);
        //////
        //Some processing Here  
        /////
        return "";
    }

    public static int getMinNumber(String word) {
        int min;
        if (word.length() % 3 == 0) {
            min = word.length() / 3;
        } else {
            min = (word.length() / 3) + 1;
        }
        return min;
    }
}

如图所示,由于找不到合适的算法,我离开了处理部分。通常,我应该每三个0替换一个0,但并不是每个单词都有效。

我正在寻找一种可以处理任何单词的解决方案。

1 个答案:

答案 0 :(得分:3)

要获得最少的1,我们需要每个1处理尽可能多的0,这意味着我们需要重复010的最大次数。因此,我们可以从左侧开始用010替换零

0000000000
↓↓↓↓↓↓↓↓↓
010010010x   <- here you can't place another 010 and we have one extra place to fill

如果010没有填写完整的数字,则意味着我们需要再输入一位或两位数字。

如果是一位数字怎么办?我们可以在这里使用0吗?让我们看看:010010010x会变成0100100100吗?
结果有效吗?否,因为最后一个零附近没有任何1。因此,我们不能使用01这样的0100100101来代替我们。

因此,如果我们需要再输入一位数字,可以将其替换为1

现在当我们要填充两位数字(例如010010010xx)时会发生什么?我们不能使用00,因为最后一个0不会有任何相邻的1

  • 我们可以使用01吗?是:因为我们将得到01001001001,所有0具有相邻的1
  • 我们可以使用10吗?是:因为我们将得到01001001010,这里所有0都具有相邻的1

我们应该检查11吗?不可以,因为我们已经可以使用0110来添加一个1,而11可以添加两个1,这样结果就不会包含最少的{{ 1}}。


我将使用这种方法来编写代码。