問題: を繰り返し、文字列s
からサブt
を削除し、同じことを行うために必要な手順の数を印刷します。文字列から部分文字列を削除し、繰り返し
説明/ワーキング:
例:
t = ab
、s = aabb
。最初のステップでは、t
がに含まれる であるかどうかを確認します。ここでは、t
が中間に含まれています。つまり、a(ab)b
です。 それを削除し、結果はab
になり、count
の値が1だけ増えます。t
がs
に含まれているかどうかを再度確認します。今、t
は となり、s
となります。つまり、(ab)
となります。そこで、それをs
から削除し、count
を増やします。したがって、t
はs
に含まれていないため、count
の値を停止して印刷します。この値は2です。私はちょうどHackerrankに9/14のテストケースに合格することができていますstatic int maxMoves(String s, String t) { int count = 0,i; while(true) { if(s.contains(t)) { i = s.indexOf(t); s = s.substring(0,i) + s.substring(i + t.length()); } else break; ++count; } return count; }
:
コード1:だから、ここで私が試したもの
をです何らかの理由で(「間違った回答」症例)。しばらくすると、Javaにreplace()
というメソッドがあることがわかりました。だから、私はif
の条件を置き換えることでそれを使用しようとし、2番目のバージョンのコードを考え出しました。
コード2:
static int maxMoves(String s, String t) {
int count = 0,i;
while(true)
{
if(s.contains(t))
s.replace(t,""); //Marked Statement
else break;
++count;
}
return count;
}
しかし、いくつかの理由で(私はなぜ知らない)、上記のコードで"と記された書"が無限に実行されます(この私が気づきました「告知された声明」をSystem.out.println(s.replace(t,""));
に置き換えたとき。私は同じ理由がありません。
、私は9/14のテストケースを渡しておりますので、「間違った回答」につながっているいくつかの論理的な誤りがなければなりません。 コード1を使用すると、どのように克服できますか? コード2を使用した場合、「マークされた声明」の無限実行を避けるにはどうすればよいですか?または私にコード3を提案したい人はいますか?
は、事前にありがとう:)
、その部分文字列 'の両方のインデックス()' 0ですか? –
sまたはtの空文字列があるとどうなりますか? –
次のようなケースを考えてください。 "" .replace( ""、 "")?これはこれで終わりでしょうか? –