猿问

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

作为输入,我有一个只包含“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(字符串字)方法表示。


这是我所做的。


  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,但它不适用于每个单词。


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


MYYA
浏览 112回答 2
2回答

函数式编程

为了获得最小量1,我们需要每个1处理尽可能多的0,这意味着我们需要重复最大次数。因此,我们可以开始将零替换为从左开始0100100000000000 ↓↓↓↓↓↓↓↓↓ 010010010x&nbsp;&nbsp;&nbsp;<-&nbsp;here&nbsp;you&nbsp;can't&nbsp;place&nbsp;another&nbsp;010&nbsp;and&nbsp;we&nbsp;have&nbsp;one&nbsp;extra&nbsp;place&nbsp;to&nbsp;fill如果没有填写整个数字,这意味着我们需要一个或两个数字。010如果它是一位数,我们该怎么办?我们可以在这里使用吗?让我们看看:会变成?这是有效的结果吗?否,因为最后一个零附近没有任何零。所以我们不能使用,这给我们留下了喜欢.0010010010x01001001001010100100101因此,如果我们需要另外一个数字,请将其替换为 .1现在,当我们有两位数要填充时会发生什么,例如?我们不能使用,因为最后不会有任何相邻的。010010010xx0001我们可以使用吗?是:因为我们会得到所有0都有相邻的10101001001001我们可以使用吗?是:因为我们会得到,这里所有0都有相邻的11001001001010我们应该检查11吗?否,因为我们已经可以使用或添加一个,而添加两个,因此结果不会包含最少量的 .011011111我将把使用这种方法编写代码留给你。

慕妹3242003

我发现@Pshemo的答案优雅而直接。使用他的方法,您甚至不需要计算要替换的 最小计数。尽管如此,我还有另一种方法可能会有所帮助:1public static void main( String[] args ) {&nbsp; &nbsp; String [] words ={"00","000","0000","00000","000000","0000000","00000000","000000000","0000000000"} ;&nbsp; &nbsp; for (String str :words) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(transform(str));&nbsp; &nbsp; }}private static String&nbsp; transform( String word ) {&nbsp; &nbsp; int min =&nbsp; getMinNumber(word);&nbsp; &nbsp; StringBuilder sb = new StringBuilder(word);&nbsp; &nbsp; //starting from char at index 1 replace each third '0' with '1'&nbsp; &nbsp; //and substract 1 for each replaced char from min&nbsp;&nbsp; &nbsp; for(int i = 1; i< word.length(); i = i+3){&nbsp; &nbsp; &nbsp; &nbsp; sb.setCharAt(i, '1');&nbsp; &nbsp; &nbsp; &nbsp; min--;&nbsp; &nbsp; }&nbsp; &nbsp; //if minimum replacement count not yet met replace last char&nbsp; &nbsp; if(min >0){&nbsp; &nbsp; &nbsp; &nbsp; sb.setCharAt(word.length()-1, '1');&nbsp; &nbsp; }&nbsp; &nbsp; return sb.toString();}public static int getMinNumber(String word) {&nbsp;&nbsp; &nbsp; //just replaced your logic to make it shorter; you can keep your own implementation&nbsp; &nbsp; return (int) Math.ceil(word.length() / 3.);}
随时随地看视频慕课网APP

相关分类

Java
我要回答