explicaciones LeetCode | 14. Prefijo común más larga (vertical comparativo C ++)

Título Descripción (simple dificultad)

vínculo del título original
Aquí Insertar imagen Descripción

algoritmo

(Comparativo Vertical) la ( norte * metro ) En M)

(1) En la primera cadena de caracteres como un estándar, atravesando cada uno de sus caracteres
(2) atravesados mientras que la otra comparación de cadenas si la posición actual son los mismos
(3) se produce si la posición actual excede el rango de la cadena o la posición carácter no coincide con la posición del primer carácter del personaje, se devuelve el prefijo común más larga (de retorno con substr)

complejidad del tiempo la ( norte * metro ) En M)

  • n formato de cadena, la más larga longitud de la cadena m, n es el peor caso de longitud de una cadena de m idénticos, por supuesto, no se requiere en circunstancias normales todas las comparaciones de cadenas, comparar hasta norte * metro yo norte L mi norte Minlen n * caracteres en él

espacio complejidad la ( 1 ) O (1)

código C ++

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        // 垂直比较 每个字符串的第i位上的字符
        // leetcode
        // leets
        // leetabs
        
        int n = strs.size();
        if (n == 0) return "";

        for (int i = 0; i < strs[0].size(); i ++) {
            char c = strs[0][i];
            for (int j = 1; j < n; j ++) {
                if (i >= strs[j].size() || c != strs[j][i]) {
                    return strs[j].substr(0, i);
                }
            }
        }

        return strs[0]; // 如果只有一个字符串,则返回第一个字符串
    }
};
// Saturday, March 7, 2020 15:26:35
class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        // up and down mode
        
        // 1. Traversal each character in first character
        
        // 2. Just if other character in same index is equal
            
        // flower
        // flow
        // flight
        int n = strs.size();
        if (n == 0) return "";
        for (int i = 0; i < strs[0].size(); i ++) {
            char c = strs[0][i];
            for (int j = 1; j < n; j ++) {
                if (strs[j][i] != c || i >= strs[j].size()) {
                    return strs[0].substr(0, i);
                }
            }
        }
        
        return strs[0];
    }
};

Escrito en la última : mi blog principalmente en el campo de los conocimientos de las ciencias resume equipo de pensamiento y opinión, para escribir cada blog es fácil de entender mi objetivo, el intercambio de tecnología y el conocimiento es un placer , y yo la bienvenida a todos junto con el intercambio de aprendizaje, no puede haber ninguna duda en la zona de comentarios, sino también mirar hacia adelante a un profundo intercambio con su (^ ∀ ^ ●)

Publicados 308 artículos originales · ganado elogios 149 · Vistas de 150.000 +

Supongo que te gusta

Origin blog.csdn.net/qq_43827595/article/details/104609017
Recomendado
Clasificación