[FRAGE] Leichter Algorithmus

05/18/2019 12:30 SiiVAS#1
Moin Leute,

ich versuche mich gerade zum ersten Mal in einer dieser Online Algorithmen Races und scheitere bereits bei wahrscheinlich einer der einfachsten Fragen.

Die Frage ist, dass man die Anzahl der Substrings eines Strings, die nur eine Art von Charakter erhalten zurückgibt. Ich bin einfach den String bruteforceartig durchgegangen und habe die Substrings mit Pattern eben überprüft. Es wurde lediglich der Testcase:

"ababbb" mit dem Ergebnis 9 gegeben, welches mein Programm auch erfolgreich bewältigt. Bei 6 anderen Hidden Test Cases scheitert es allerdings.

Code:
import java.util.Scanner;
import java.util.regex.Pattern;

public class Main {
    static int counter=0;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        if (s.length() > 100000 || s.length() < 1) {
            System.exit(0);
        }

        for (int i = 0; i < s.length(); i++) {
            for (int k=i+1; k <= s.length();k++) {
                    String temp = s.substring(i, k);
                    if (Pattern.matches("^(.)\\1*$",temp)) {
                        counter++;
                    }
            }
        }
        System.out.println(counter);
    }
}
Das hier ist mein bisheriger Code und auch bei selbsterstellten Beispielen scheint der Code zu funktionieren. Könnte mir jemand aushelfen bitte?
05/18/2019 12:49 False#2
#moved
05/19/2019 10:58 Shino#3
Wäre eventuell ganz hilfreich, wenn du die komplette Aufgabenstellung hier reinschreiben würdest. Dein Programm läuft an sich ja und müsste alle Substrings finden. Du könntest noch bei einem leeren String einen Counter von 0 ausgeben, weil er ja auch 0 Substrings besitzt. Die Frage ist ob du nur für alphabetische Chars einen Substring suchen sollst, oder auch für Sonderzeichen oder Leerzeichen.

Ansonsten noch ein paar kleine Tipps: Ich würde immer sowas in eine eigene Methode schreiben (auch wenn die wie hier nur 20 Zeilen sind). Und bei deiner inneren For-Schleife würde ich noch ein else einfügen und die Schleife abbrechen (wenn z.B. ab kein Substring ist, dann ist aba definitiv auch keiner).