首页 > 解决方案 > 根据条件将字符串转换为字符串

问题描述

作为输入,我有一个仅包含“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,但它并不适用于每个单词。

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

标签: javaarraysstring

解决方案


为了获得最少的 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东西。所以我们不能使用0which 给我们留下1like 0100100101

因此,如果我们需要多一位数字,我们将其替换为1.

现在当我们有两个数字要填充时会发生什么,比如010010010xx?我们不能使用00,因为 last0没有任何相邻1的 。

  • 我们可以使用01吗?YES:因为我们会得到所有的 0 有相邻的 101001001001
  • 我们可以使用10吗?是:因为我们会得到,而且这里所有的 0 都有相邻的 101001001010

我们应该检查 11 吗?不,因为我们已经可以使用01or 10which add one 1while add 11two1所以结果不会包含最少的1.


我将使用这种方法编写代码留给您。


推荐阅读