Проблема в моем решении "Повторное совпадение строк" - PullRequest
0 голосов
/ 25 марта 2020

Я должен указать минимальное количество раз, которое необходимо повторить, чтобы строка A повторялась, чтобы строка B становилась подстрокой A.

Мой ответ неверен для некоторых тестовых примеров, таких как

A = "abc"
B = "cabcabca"

Мой вывод 3. 3. должно быть 4.

Мой код -

class Solution {
    public int repeatedStringMatch(String A, String B) {
        int count = 0;
        while (A.length() <= 1000) {
            if (A.indexOf(B) != -1)
                return (count + 1);
            else
                A = A + A;
            count++;
        }
        return -1;
    }
}

1 Ответ

2 голосов
/ 25 марта 2020

Проблема в том, что A=A+A; делает A как abcabc после первой итерации, abcabcabcabc после второй итерации, abcabcabcabcabcabcabcabc после третьей итерации и т. Д., Т. Е. Вместо добавления, строка удваивается в каждой итерации.

Вы как будто получили задачу добавить 2 к себе на каждой итерации, т.е. после первой итерации оно должно стать 2 + 2 = 4, после второй итерации оно должно стать 4 + 2 = 6, после третьей итерации оно должно стать 6 + 2 = 8 и т. д.

Тогда как, как вы это сделали, оно станет 2 + 2 = 4 после первой итерации, 4 + 4 = 8 после второй итерации, 8 + 8 = 16 после третья итерация и т. д.

В качестве примечания следует избегать использования конкатенации строк в al oop. Также следует соблюдать Java соглашение об именах , например, имя переменной A должно быть a.

. Сделайте это следующим образом:

public class Main {
    public static void main(String[] args) {
        // Test 
        System.out.println(repeatedStringMatch("abc", "cabcabca"));
    }

    static int repeatedStringMatch(String a, String b) {
        int count = 1;
        StringBuilder sb = new StringBuilder(a);
        while (sb.length() <= 1000) {
            if (sb.indexOf(b) != -1) {
                return count;
            } else {
                sb.append(a);
                count++;
            }
        }
        return -1;
    }
}

Вывод:

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