Ich hatte ein Problem, wo ich alle Teilstrings einer Zeichenkette finden sollte, die Palindrome sind. Eingabe wäre immer 1 Wort. Die Testeingabe war Aabaa. Ich entschied mich zu versuchen, clever zu sein und einen String-Puffer meiner Teilzeichenkette zu machen, dann benutze die umgekehrte Methode, um mit dem Original zu vergleichen, indem man String.equals benutzt. Es hat nicht funktioniert.jvm String mit StringBuffer.reverse() zu vergleichen, schlägt immer fehl
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)
}
}
}
}
}
Als ich Kommentar- die erste print-Anweisung die Ausgabe aussieht wie dieser mit Testeingang aabaa
a
aa
aab
aaba
aabaa
ab
aba
abaa
b
ba
baa
So bin ich den richtigen Teil bekommen, aber die letzten if-Anweisung nie wahr löst und I don‘ Ich weiß, warum das so ist.
Mir fehlte ein toString, danke für den Rat. –
Beachten Sie, dass Sie, wenn Sie ein 'Set' verwenden (wie vorgeschlagen), die Doppel-Suche nicht benötigen wie' if (! Found.contains (sub)) {found.add (sub); ...} 'wie du kannst' if (found.add (sub)) {...} '. Außerdem müssen Sie kein 'toString()' einfügen, wenn Sie den Inhalt vergleichen möchten. Verwenden Sie einfach ['sub.contentEquals (rev)'] (https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#contentEquals-java.lang.CharSequence-). Da Sie es nur ausdrucken wollen und nur wenn die beiden Objekte gleich sind, können Sie einfach 'if (sub.contentEquals (StringBuffer (sub) .reverse())) {println (sub); } ' – Holger