Problema en mi solución "repetida coincidencia con la cadena"

user13066649:

Tengo que decir el número mínimo de veces de cuerda Anecesidades que se repite de manera que la cadena Bse convierte en una subcadena de A.

Mi respuesta es incorrecta para algunos casos de prueba como

A = "abc"
B = "cabcabca"

Mi salida está llegando 3..it debe haber 4.

Mi código es-

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;
    }
}
Arvind Kumar Avinash:

El problema es debido A=A+A;, ya que hace Aque abcabcdespués de la primera iteración, abcabcabcabcdespués de la segunda iteración, abcabcabcabcabcabcabcabcdespués de la tercera iteración y así sucesivamente es decir, en vez de conseguir adjuntas, la cadena se está duplicado en cada iteración.

Es como se le ha dado una tarea para agregar 2a sí mismo en cada iteración es decir, después de la primera iteración, debe convertirse 2 + 2 = 4, después de la segunda iteración, debe convertirse 4 + 2 = 6, después de la tercera iteración debería convertirse 6 + 2 = 8y así sucesivamente.

Mientras que la forma en que lo ha hecho, se convertirá 2 + 2 = 4después de la primera iteración, 4 + 4 = 8después de la segunda iteración, 8 + 8 = 16después de la tercera iteración y así sucesivamente.

Como nota al margen, se debe evitar el uso de la concatenación de cadenas en un bucle. También debe seguir Java convención de nomenclatura , por ejemplo, el nombre de la variable Adebe ser a.

Hacerlo de la siguiente manera:

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;
    }
}

Salida:

4

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=372874&siteId=1
Recomendado
Clasificación