1
私は回文である文字列のすべての部分文字列を見つけることに問題がありました。入力は常に1ワードです。テスト入力はaabaaでした。私は賢明にしようとし、私の部分文字列の文字列バッファを作成し、String.equalsを使ってオリジナルと比較する逆のメソッドを使用することにしました。それはうまくいかなかった。jvm StringとStringBuffer.reverse()との比較が常に失敗する
import java.util.*
fun main(args: Array<String>) {
val scan = Scanner(System.`in`)
val input = scan.next()
val found = ArrayList<String>()
for (i in 0..input.length - 1) {
for (j in 0..input.length - i) {
val sub = input.substring(i, i + j)
if (!found.contains(sub)) {
// println(sub)
found.add(sub)
val rev = StringBuffer(sub).reverse()
if (sub.equals(rev)) {
println(rev)
}
}
}
}
}
私は文が真の解決はありませんし、私は「ドンのであれば、私は正しい部分文字列を取得しますが、最後の午前
a
aa
aab
aaba
aabaa
ab
aba
abaa
b
ba
baa
aabaaテスト入力を使用して、最初のprint文にこのような出力を見てコメントを解除なぜこれがあるのか知りません。
私はtoStringを見つけられませんでした。アドバイスをいただきありがとうございます。 –
'Set'を使うと(示唆したように)' if(!found.contains(sub)){found.add(sub);}のようなダブルルックアップは必要ありません。 ...} 'if(found.add(sub)){...}'を使うことができます。さらに、内容を比較する場合は、 'toString()'を挿入する必要はありません。 ['sub.contentEquals(rev)'](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#contentEquals-java.lang.CharSequence-)を使用してください。あなたはそれを印刷したいだけで、2つのオブジェクトが等しい場合にのみ 'if(sub.contentEquals(StringBuffer(sub).reverse())){println(sub);}を使うことができます。 } ' – Holger