作为输入,我有一个仅包含“ 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,但并不是每个单词都有效。
我正在寻找一种可以处理任何单词的解决方案。
答案 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
。因此,我们不能使用0
像1
这样的0100100101
来代替我们。
因此,如果我们需要再输入一位数字,可以将其替换为1
。
现在当我们要填充两位数字(例如010010010xx
)时会发生什么?我们不能使用00
,因为最后一个0
不会有任何相邻的1
。
01
吗?是:因为我们将得到01001001001
,所有0具有相邻的1 10
吗?是:因为我们将得到01001001010
,这里所有0都具有相邻的1 我们应该检查11吗?不可以,因为我们已经可以使用01
或10
来添加一个1
,而11
可以添加两个1
,这样结果就不会包含最少的{{ 1}}。
我将使用这种方法来编写代码。