java - 根据条件将字符串转换为字符串
问题描述
作为输入,我有一个仅包含“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,我们需要每个 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
which 给我们留下1
like 0100100101
。
因此,如果我们需要多一位数字,我们将其替换为1
.
现在当我们有两个数字要填充时会发生什么,比如010010010xx
?我们不能使用00
,因为 last0
没有任何相邻1
的 。
- 我们可以使用
01
吗?YES:因为我们会得到所有的 0 有相邻的 101001001001
- 我们可以使用
10
吗?是:因为我们会得到,而且这里所有的 0 都有相邻的 101001001010
我们应该检查 11 吗?不,因为我们已经可以使用01
or 10
which add one 1
while add 11
two1
所以结果不会包含最少的1
.
我将使用这种方法编写代码留给您。
推荐阅读
- c++ - 我们需要 std::as_const() 做什么?
- operating-system - 为什么不将所有指令设置为特权?
- excel - 特定日期内数组中不同类别的总和值
- reactjs - 前端UML部署图
- postgresql - 如何同步两个heroku应用的桶和数据库?
- python - 从基于函数的视图返回基于类的视图
- c - 为什么 c 中的整数变量在将字符值传递给它之后会打印其旧值?
- python - 将 dateutil 中的时间戳从 utc 更改为非 utc
- kubernetes - 卷“realm-secret”的 MountVolume.SetUp 失败:找不到秘密“realm-secret”
- c# - 如何将模型从视图传递到另一个视图,而不会丢失数据?