入力として、私は、「0」を含む文字列オブジェクトを持っています。
入力の例String word = "00000"
。
質問は、出力として別の文字列にこの文字列を変換することです。
変換は、すべて「0」についての結果は、少なくとも一つの「1」に隣接していることをいくつかの特定の位置に「1」で、いくつかの「0」を置き換えることです。
いくつかの例:
input | output
0000 0101
00000 01001
000000 010010
0000000 0100101
00000000 01001010
私たちが見ることができるように、出力が条件を満たし、すべての「0」は少なくとも一つの「1」に隣接しています。
第2の条件は、私たちが「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;
}
}
示されているように私は適者生存のアルゴリズムを見つけるcoudn'tので、私は処理の一部を残しました。通常、私はすべての3 0 1 0を置き換える必要がありますが、それはすべての単語のための作業をdosen't。
私は、任意の単語を処理できるソリューションを探しています。
1の最小量を得るために、私たちは、それぞれ1我々は繰り返す必要があることを意味するできるだけ多くの0として処理する必要が010
倍の最大量を。だから我々はとゼロを交換し始めることができます010
左から
0000000000
↓↓↓↓↓↓↓↓↓
010010010x <- here you can't place another 010 and we have one extra place to fill
場合は010
全体の数にこの手段を記入していなかった私たちは、1つまたは2つの以上の数字が必要です。
それが1桁の場合、我々は何をすべき?我々は使用することができ0
、ここで?見てみましょう:010010010x
になるでしょうか0100100100
?
それは有効な結果ですか?NO最後のゼロは任意の持っていないので1
、それに近いが。使用することはできません我々はそう0
で私たちを残している1
ような0100100101
。
私たちはもう一桁を必要とするのであれば、私たちはと交換してください1
。
我々は埋めるために2桁の数字を持っている場合今何が同じように、起こりますか010010010xx
?私たちは、使用することはできません00
最後はので、0
任意の隣接を持っていないでしょう1
。
- 我々は使用することができますか
01
?YES:私たちがなりますので、すべて0が隣接してい101001001001
- 我々は使用することができますか
10
?YES:私たちがなりますので、ここでも全て0が隣接してい101001001010
私たちは11をチェックすべきか?ノー我々はすでに使用することができますので、01
または10
1つの追加している1
間に11
2が追加され1
、その結果は、最小限の量を含まないように1
。
私はあなたにそのアプローチを使用して書き込みコードを残します。