[14]. Prefijo común más largo

Prefijo común más largo

 


Titulo

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 "".

Ejemplo 1:

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

Ejemplo 2

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

Explicación

  • Toda entrada contiene solo letras minúsculas az.
     

Prototipo de función

Prototipo de función C:

char * longestCommonPrefix(char ** strs, int strsSize){}

 


Juicio de límites

if( strs == NULL || strsSize == 0)
        return "";
if(strsSize == 1)
        return strs[0];

 


Diseño de algoritmo: escaneo vertical

Idea: Haga un recorrido, comenzando con la primera palabra, defina un desplazamiento del puntero hacia atrás, si el proceso de desplazamiento del puntero es diferente, regrese, de lo contrario continuará atravesando.

for(int index=0; index<strlen(strs[0]); index++)       // 以第一个单词的长度做结束条件
    {
        char tmp = strs[0][index];             // 记录第一个单词的第 index 个字母, 与后面的字母比较
        for(int j=1; j<strsSize; j++){         // 和其它单词比较,不用和自己比了,所以从 1 开始
		    if( tmp != strs[j][index] || (!strs[j][index]) ){   // 其它单词的第 index 个字母不等于第一个单词第 index 个字母时、或者其它单词的字母已经被遍历完了
		       strs[0][index] = '\0';                       // 返回相同的前缀,但破坏了原数据不太好
               return strs[0];	 
            }  
	    }
    }
    return strs[0];   // 所有单词的所有字母都相等时,返回全部

Código completo:

char * longestCommonPrefix(char ** strs, int strsSize){
    if( strs == NULL || strsSize == 0)
        return "";
    if(strsSize == 1)
        return strs[0];

    for(int index=0; index<strlen(strs[0]); index++)       // 以第一个单词的长度做结束条件
    {
        char tmp = strs[0][index];             // 记录第一个单词的第 index 个字母, 与后面的字母比较
        for(int j=1; j<strsSize; j++){         // 和其它单词比较,不用和自己比了,所以从 1 开始
		    if( tmp != strs[j][index] || (!strs[j][index]) ){   // 其它单词的第 index 个字母不等于第一个单词第 index 个字母时、或者其它单词的字母已经被遍历完了
		       strs[0][index] = '\0';                       // 返回相同的前缀,但破坏了原数据不太好
               return strs[0];	 
            }  
	    }
    }
    return strs[0];       // 所有单词的所有字母都相等时,返回全部
}

Complejidad de escaneo vertical:

  • Complejidad del tiempo: Θ ( norte 2 ) \ Theta (n ^ {2})
  • Complejidad espacial: Θ ( 1 ) \ Theta (1)
132 artículos originales publicados · elogiados 377 · 70,000 visitas

Supongo que te gusta

Origin blog.csdn.net/qq_41739364/article/details/105447255
Recomendado
Clasificación