Улучшение времени выполнения и стиля сравнения строк метода Java? - PullRequest
1 голос
/ 29 апреля 2019

Я пытаюсь решить эту проблему: Напишите функцию, чтобы проверить, имеют ли две строки одинаковую длину. Если какая-либо строка содержит какие-либо числа, эти числа добавляются к длине. Пример: "ab2" & "aabb" // true "hhhsss" & "12" // false "привет" & "сара" // правда "2abc" & a1a1a "// true

Это мой код, он работает, но он медленный, повторяющийся, слишком многословный и менее эффективный, чем должен быть. Я новичок и ищу советы о том, как это улучшить. Заранее спасибо!

public static boolean pattern(String a, String b) {
    char A[] = a.toCharArray();
    char B[] = b.toCharArray();

    Arrays.sort(A);
    Arrays.sort(B);

    int i = 0;
    int timesA = 0;
    int lengthA = 0;
    while (i < A.length && Character.isDigit(A[i])) {
        lengthA += A[i];
        timesA++;
        i++;
    }
    lengthA += A.length - timesA;

    int j = 0;
    int timesB = 0;
    int lengthB = 0;
    while (j < B.length && Character.isDigit(B[j])) {
        lengthB += B[j];
        timesB++;
        j++;
    }
    lengthB += B.length - timesB;

    return lengthA == lengthB;
}

1 Ответ

0 голосов
/ 29 апреля 2019

Я бы внес некоторые изменения в вашу общую стратегию.

Вы не хотите сортировать две строки в начале.

Создайте четыре переменные: счетчик и буфер цифр для каждой строки.

Цикл по каждому символу двух строк и, если это:

цифра: объединить цифру с соответствующим буфером

не цифра : добавить 1 к соответствующему счетчику.Кроме того, оцените соответствующий буфер как число и добавьте результат к счетчику.Очистить буфер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...