为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MYYA 2022-08-03 16:38:58
作为输入,我有一个只包含“0”的字符串对象。输入的示例。String word = "00000"问题是将此字符串转换为另一个字符串作为输出。转换是在某些特定位置将某些“0”替换为“1”,导致每个“0”都与至少一个“1”相邻。一些例子:input     |    output0000          010100000         01001000000        0100100000000       010010100000000      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,但它不适用于每个单词。我正在寻找一个可以处理任何单词的解决方案。
查看完整描述

2 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

为了获得最小量1,我们需要每个1处理尽可能多的0,这意味着我们需要重复最大次数。因此,我们可以开始将零替换为从左开始010010

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

如果没有填写整个数字,这意味着我们需要一个或两个数字。010

如果它是一位数,我们该怎么办?我们可以在这里使用吗?让我们看看:会变成?
这是有效的结果吗?否,因为最后一个零附近没有任何零。所以我们不能使用,这给我们留下了喜欢.0010010010x01001001001010100100101

因此,如果我们需要另外一个数字,请将其替换为 .1

现在,当我们有两位数要填充时会发生什么,例如?我们不能使用,因为最后不会有任何相邻的。010010010xx0001

  • 我们可以使用吗?是:因为我们会得到所有0都有相邻的10101001001001

  • 我们可以使用吗?是:因为我们会得到,这里所有0都有相邻的11001001001010

我们应该检查11吗?否,因为我们已经可以使用或添加一个,而添加两个,因此结果不会包含最少量的 .011011111


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


查看完整回答
反对 回复 2022-08-03
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

我发现@Pshemo的答案优雅而直接。使用他的方法,您甚至不需要计算要替换的 最小计数。尽管如此,我还有另一种方法可能会有所帮助:1


public static void main( String[] args ) {


    String [] words ={"00","000","0000","00000","000000","0000000","00000000","000000000","0000000000"} ;

    for (String str :words) {

        System.out.println(transform(str));

    }

}

private static String  transform( String word ) {

    int min =  getMinNumber(word);

    StringBuilder sb = new StringBuilder(word);

    //starting from char at index 1 replace each third '0' with '1'

    //and substract 1 for each replaced char from min 

    for(int i = 1; i< word.length(); i = i+3){

        sb.setCharAt(i, '1');

        min--;

    }

    //if minimum replacement count not yet met replace last char

    if(min >0){

        sb.setCharAt(word.length()-1, '1');

    }

    return sb.toString();

}


public static int getMinNumber(String word) { 

    //just replaced your logic to make it shorter; you can keep your own implementation

    return (int) Math.ceil(word.length() / 3.);

}


查看完整回答
反对 回复 2022-08-03
  • 2 回答
  • 0 关注
  • 111 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信