Prefijo común más largo (Leetcode)

1
bullseye 2020-11-05 14:52.

Enlace aquí Actualmente estoy aprendiendo c ++ proveniente de un fondo de Python, así que incluiré una solución en Python y en C ++ para la declaración del problema a continuación, incluyo ambos por conveniencia, si no conoce C ++, no dude para revisar Python y viceversa.

Escriba una función para encontrar la cadena de prefijo común más larga entre una matriz de cadenas. Si no hay un prefijo común, devuelve una cadena vacía "".

Ejemplo 1:

Entrada: words = ['flower', 'flow', 'flight']

Salida: 'fl'

Ejemplo 2:

Entrada: strs = ['dog', 'racecar', 'car']

Salida: ''

longest_common_prefix.py

def get_longest(words):
    if not words:
        return ''
    common = words[0]
    for word in words:
        while not word.startswith(common):
            common = common[:-1]
    return common


if __name__ == '__main__':
    print(f"Longest prefix: \n{get_longest(['flower', 'flow', 'fly'])}")

Estadísticas de Leetcode:

  • Tiempo de ejecución: 32 ms, más rápido que el 76,56% de los envíos en línea de Python3 para el prefijo común más largo.

  • Uso de memoria: 14 MB, menos del 100,00% de los envíos en línea de Python3 para el prefijo común más largo.

longest_common_prefix.h

#ifndef LEETCODE_LONGEST_COMMON_PREFIX_H
#define LEETCODE_LONGEST_COMMON_PREFIX_H

#include <string_view>
#include <vector>


std::string_view get_common_prefix(const std::vector<std::string_view>& words);


#endif //LEETCODE_LONGEST_COMMON_PREFIX_H

longest_common_prefix.cpp

#include <iostream>
#include <string_view>
#include <vector>


std::string_view get_common_prefix(const std::vector<std::string_view> &words) {
    if (words.empty())
        return "";
    std::string_view common = words[0];
    for (auto word: words) {
        while (word.find(common, 0) != 0) {
            common = common.substr(0, common.size() - 1);
        }
    }
    return common;
}


int main() {
    std::vector<std::string_view> xxx{"flow", "flower", "fly"};
    std::cout << "Longest prefix:\n" << get_common_prefix(xxx);
}

Estadísticas de Leetcode:

  • Tiempo de ejecución: 0 ms, más rápido que el 100,00% de los envíos en línea de C ++ para el prefijo común más largo.
  • Uso de memoria: 9,9 MB, menos del 7,29% de los envíos en línea de C ++ para el prefijo común más largo.

1 answers

5
Toby Speight 2020-11-06 06:23.

Solo voy a revisar el código C ++ aquí, ya que todo lo que podría sugerir para el código Python también se aplica a C ++, por lo que se incluye en esta revisión.

En primer lugar, la interfaz es bastante limitante: las entradas deben convertirse en un vector de objetos de vista de cadena, lo cual es inconveniente si tengo una lista vinculada de cadenas o un flujo de entrada que produce QStrings. Recomiendo cambiar para aceptar un par de iteradores, o en C ++ suficientemente moderno, un std::ranges::rangeobjeto.

Esta prueba es ineficiente:

word.find(common, 0) != 0

Si no encontramos commonen la posición 0, find()continuaremos buscando el resto de la cadena (el código Python es mejor aquí). Necesitamos una implementación de starts_with()(que está en C ++ 20's std::string) - o mejor, podríamos usar std::mismatch()para encontrar directamente cuántas de las cadenas son comunes, eliminando el bucle donde repetidamente eliminamos un solo carácter.

Aquí está mi intento de hacerlo, también con una simple optimización para regresar temprano cuando la cadena común se vacía:

#include <algorithm>
#include <iterator>
#include <string_view>
#include <vector>

namespace
{
    template<typename String>
    String common_prefix(const String& a, const String& b)
    {
        using std::begin;
        using std::end;
        auto end_iter = std::mismatch(begin(a), end(a), begin(b), end(b));
        if (end_iter.first == end(a)) { return a; }
        if (end_iter.second == end(b)) { return b; }
        return String(begin(a), end_iter.first - begin(a));
    }
}

template<typename Iter, typename IterEnd = Iter>
std::string_view get_common_prefix(Iter first, IterEnd last)
{
    if (first==last) { return ""; }
    std::string_view common = *first;
    for (auto it = first;  it != last;  ++it) {
        common = common_prefix(common, *it);
        if (common.empty()) { return common; }
    }
    return common;
}

template<typename Container>
std::string_view get_common_prefix(const Container& words)
{
    using std::begin;
    using std::end;
    return get_common_prefix(begin(words), end(words));
}

MORE COOL STUFF

Jana Duggar: Todo lo que ha dicho sobre el amor y su ventana de 5 años para encontrar al 'Elegido'

Jana Duggar: Todo lo que ha dicho sobre el amor y su ventana de 5 años para encontrar al 'Elegido'

Jana Duggar ha sido abierta sobre su búsqueda del amor. Aquí está todo lo que ha dicho sobre el tema y su ventana de cinco años para el matrimonio.

Sam Heughan sabe exactamente lo que tomará del set de 'Outlander': 'Me siento como si fuera Jamie cuando me los pongo'

Sam Heughan sabe exactamente lo que tomará del set de 'Outlander': 'Me siento como si fuera Jamie cuando me los pongo'

La estrella de 'Outlander', Sam Heughan, reveló recientemente qué se llevará del set para recordar a Jamie Fraser, el papel que lo convirtió en una estrella.

La primera canción de los Beatles que fue una de las 'actuaciones más emocionantes' de la banda, según Fab Four Insider

La primera canción de los Beatles que fue una de las 'actuaciones más emocionantes' de la banda, según Fab Four Insider

'She Loves You' fue escrita en una hora, grabada en un día y fue la canción de The Beatles con una de las mejores interpretaciones de su carrera.

Dolly Parton ayudó a su abuela 'inválida' cuando ninguno de los otros nietos lo haría: también le hacía una broma

Dolly Parton ayudó a su abuela 'inválida' cuando ninguno de los otros nietos lo haría: también le hacía una broma

Dolly Parton y su abuela Bessie tenían una relación especial. La abuela Parton estaba muy enferma, pero eso no impidió que Dolly le hiciera una broma.

Orígenes del Islam: una historia religiosa

Orígenes del Islam: una historia religiosa

Los orígenes del Islam se remontan a principios del siglo VII en la Península Arábiga. El Islam surgió en la ciudad de La Meca, donde un hombre llamado Mahoma, un próspero comerciante de una poderosa tribu, recibió una revelación divina.

Las 10 especies de monos más "feas": Belleza poco convencional en los primates

Las 10 especies de monos más "feas": Belleza poco convencional en los primates

Algunos monos tienen mucha suerte con la genética. ¿Otros? No tanto. El mono más feo no es una sola especie, sino toda una galería de primates que te hacen mirar dos veces y preguntarte si la evolución te estaba jugando una broma.

¿Cuál es la madera más dura del mundo?

¿Cuál es la madera más dura del mundo?

Puede que pienses que el roble o el nogal americano son maderas resistentes, pero cuando se trata de las maderas más duras del mundo, ni siquiera se acercan.

10 de las criaturas marinas más aterradoras que acechan en las profundidades del océano

10 de las criaturas marinas más aterradoras que acechan en las profundidades del océano

El océano rebosa belleza, pero también esconde algunas de las criaturas marinas más aterradoras del planeta. Muchos de estos animales acechan en las profundidades oceánicas, en el oscuro y opresivo mundo de alta presión del océano.

Resumen del oso: ¿Es Marcus el hombre más amable, suave y sincero de Chicago?

Resumen del oso: ¿Es Marcus el hombre más amable, suave y sincero de Chicago?

“Children” lanza un cameo de renombre y algunas noticias devastadoras

Por $ 9,800, ¿los 'empacarías' en este Toyota RAV4 2008 de siete plazas?

Por $ 9,800, ¿los 'empacarías' en este Toyota RAV4 2008 de siete plazas?

Se dice que este RAV4 está en excelentes condiciones y preparado para un juego de sillas musicales.

Furgoneta de reparto de Amazon se enciende en una ardiente explosión durante el calor del verano en Houston

Furgoneta de reparto de Amazon se enciende en una ardiente explosión durante el calor del verano en Houston

Imágenes de drones capturaron a los bomberos que parecían tener dificultades para apagar el incendio.

Black Panther Show de Marvel será el programa animado más crucial hasta el momento

Black Panther Show de Marvel será el programa animado más crucial hasta el momento

Eyes of Wakanda se vincula directamente con la MCU, además de actualizaciones sobre X-Men '97, What If..., Daredevil y más.

Anna Wintour deja su puesto como editora jefe de Vogue después de 37 años… ¡y está contratando!

Anna Wintour deja su puesto como editora jefe de Vogue después de 37 años… ¡y está contratando!

El veterano editor en jefe, que se unió a la revista American Vogue en 1988, anunció la noticia en una reunión de personal la mañana del jueves 26 de junio.

El Papa Francisco muere a los 88 años tras una crisis de salud

El Papa Francisco muere a los 88 años tras una crisis de salud

El papa Francisco, cabeza de la Iglesia católica y líder de los aproximadamente 1.300 millones de católicos del mundo, falleció a los 88 años.

Todo sobre el impresionante anillo de compromiso de zafiro de Kate Middleton (¡y la reliquia real en la que se inspiró!)

Todo sobre el impresionante anillo de compromiso de zafiro de Kate Middleton (¡y la reliquia real en la que se inspiró!)

El anillo de compromiso de Kate Middleton perteneció a la princesa Diana antes de que el príncipe William le propusiera matrimonio con él. Descubra todo lo que hay que saber sobre esta pieza histórica aquí.

¿Quién es la esposa de John Cleese? Todo sobre Jennifer Wade

¿Quién es la esposa de John Cleese? Todo sobre Jennifer Wade

John Cleese se casó con su esposa, Jennifer Wade, en 2012. Aquí encontrará todo lo que debe saber sobre la esposa de John Cleese, Jennifer Wade.

los pronombres dan mucho miedo

Me llama la atención De repente, como ocurre con tanta frecuencia Es el punto medio de nuevo <No, no el del Pacífico, tú, el del carnaval> Todos los titulares en voz alta...

3 formas comprobadas de mejorar su habilidad de escritura

Los beneficios de escribir y estrategias para ayudarte a hacerlo

3 formas comprobadas de mejorar su habilidad de escritura

En 2022, con el lanzamiento de GPT-3, la habilidad de escritura parece perder importancia. Con IA, las personas con mala escritura también pueden generar personal de calidad.

La erosión lenta: revelando las formas en que las personas se desgastan en sus carreras

La erosión lenta: revelando las formas en que las personas se desgastan en sus carreras

En el mundo acelerado y competitivo de hoy, la carrera de uno juega un papel importante en el crecimiento personal, la estabilidad financiera y la satisfacción general con la vida. Sin embargo, muchas personas se encuentran atrapadas en un ciclo implacable de estancamiento e insatisfacción, y su vida profesional se desvanece gradualmente.

¿Qué hace que un podcast sea influyente?

¿Qué hace que un podcast sea influyente?

La semana pasada noté un comunicado de prensa, enviado a través de PressGazette (un sitio web de noticias de los medios británicos). El artículo anunciaba que Acast, la empresa de publicidad y alojamiento de podcasts de Scandi, lideraría un consorcio de editores "probablemente los más influyentes" en podcasting.

Language