[LeetCode-String] El prefijo común más largo

Descripción del título

Escriba una función para encontrar el prefijo común más largo en una matriz de cadenas.
Si no hay un prefijo público, se devuelve la cadena vacía "".
Ejemplos

输入: ["flower","flow","flight"]
输出: "fl"

输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

Enlace del título: https://leetcode-cn.com/problems/longest-common-prefix/

Idea 1

Encuentre primero la cadena más corta, luego atraviese la cadena más corta y compare el bit actual con el resto de la cadena: si el bit actual de la cadena restante y la cadena más corta son todos iguales, compare el siguiente bit; si hay uno Si no son iguales, el ciclo termina, y el dígito anterior desde el comienzo de la cadena hasta la posición actual es el prefijo común más largo (de hecho, no es necesario comparar en función de la cadena más corta, solo busque una cadena como comparación de referencia) El código es el siguiente:

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if(strs.empty()) return "";

        int shortest = 0x7fffffff;
        string shortestStr = "";
        for(int i=0; i<strs.size(); i++){
            if(strs[i].length()<shortest){
                shortest = strs[i].length();
                shortestStr = strs[i];
            }
        }

        int i=0;
        while(i<shortest){
            bool breakFlag = false;
            for(int j=0; j<strs.size(); j++){
                if(strs[j][i]!=shortestStr[i]){
                    breakFlag = true;
                    break;
                }
            }
            if(breakFlag) break;
            i++;
        }
        return shortestStr.substr(0,i);
    }
};
  • Complejidad de tiempo: O (n)
    n es la longitud del conjunto de cadenas. El peor de los casos es O (n * m), donde m es la longitud de la cadena más corta.
  • Complejidad espacial: O (1)

Idea 2

Primero seleccione una cadena como el prefijo actual, puede elegir la primera y luego determinar si el prefijo actual es el prefijo de la segunda cadena: de lo contrario, se elimina el último carácter del prefijo actual, si el prefijo actual es Si está vacío, regresa directamente; si no está vacío y es el prefijo de la segunda cadena; luego continúe comparando la tercera cadena por el mismo método hasta que se complete la comparación o el prefijo esté vacío. Si se completa la comparación, el prefijo actual Si no está vacío, el prefijo actual es el prefijo común más largo. El código es el siguiente:

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if(strs.empty()) return "";

        string prefix = strs[0];
        for(int i=1; i<strs.size(); i++){
            while(strs[i].find(prefix)!=0){    // prefix不是strs[i]的前缀
                prefix = prefix.substr(0, prefix.length()-1);
                if(prefix.empty()) return prefix;
            }
        }
        return prefix;
    }
};
  • Complejidad de tiempo: O (n)
    n es la longitud del conjunto de cadenas.
  • Complejidad espacial: O (1)

Supongo que te gusta

Origin www.cnblogs.com/flix/p/12686641.html
Recomendado
Clasificación