Algoritmo: Encuentre la primera posición donde existe la subcadena 28. Implemente strStr ()

Para obtener la colección completa de LeetCode, consulte: Colección LeetCode Github

tema

28. Implementar strStr ()

Implementar strStr().

Devuelve el índice de la primera aparición de needleen haystack, o -1si needleno forma parte de haystack.

Aclaración:

¿Qué debemos devolver cuando la aguja es un hilo vacío? Esta es una gran pregunta para hacer durante una entrevista.

A los efectos de este problema, devolveremos 0 cuando la aguja sea una cuerda vacía. Esto es consistente con strstr () de C y indexOf () de Java.

Ejemplo 1:

Input: haystack = "hello", needle = "ll"
Output: 2

Ejemplo 2:

Input: haystack = "aaaaa", needle = "bba"
Output: -1

Ejemplo 3:

Input: haystack = "", needle = ""
Output: 0

Restricciones:

0 <= haystack.length, needle.length <= 5 * 104
haystack and needle consist of only lower-case English characters.

1. Solución exhaustiva

Los dos bucles for pueden coincidir. El punto que es fácil pasar por alto aquí es juzgar si la aguja es una cuerda vacía ""y, en caso afirmativo, devolver 0.

class Solution {
    
    
    public int strStr(String haystack, String needle) {
    
    
        // check null
        if (haystack == null && needle == null) {
    
    
            return 0;
        }
        if (haystack == null || needle == null) {
    
    
            return -1;
        }
        int hlen = haystack.length();
        int nlen = needle.length();
        // check ""
        if (nlen == 0) {
    
    
            return 0;
        }
        for(int i = 0; i <= hlen - nlen; i++) {
    
    
            for(int k = 0; k < nlen; k++) {
    
    
                if (haystack.charAt(i + k) != needle.charAt(k)) {
    
    
                    break;
                }
                if (k == nlen - 1) {
    
    
                    return i;
                }
            }
        }
        
        return -1;
    }
}

2. Escritura elegante

Suponiendo que las dos cadenas no estén vacías, puede utilizar la siguiente escritura elegante.

class Solution {
    
    
    public int strStr(String haystack, String needle) {
    
    
        for (int i = 0; ; i++) {
    
    
            for (int k = 0; ; k++) {
    
    
                if (k == needle.length()) return i;
                if (i + k == haystack.length()) return -1;
                if (haystack.charAt(i + k) != needle.charAt(k)) break;
            }
        }
    }
}

Supongo que te gusta

Origin blog.csdn.net/zgpeace/article/details/114339038
Recomendado
Clasificación