Dirección del título: LeetCode: la plataforma de aprendizaje de programación en línea líder en el mundo
Tipo: matriz
Dificultad: Ensayo
(1) La solución que pensé originalmente (alternancia de bucle directo):
Complejidad del tiempo: O (N)
Complejidad espacial: O (N)
class Solution {
public String mergeAlternately(String word1, String word2) {
char[] words1 = word1.toCharArray();
char[] words2 = word2.toCharArray();
int len1 = words1.length;
int len2 = words2.length;
StringBuilder builder = new StringBuilder();
if(len1 > len2){
for(int i = 0 ; i < len2; i++){
builder.append(words1[i]);
builder.append(words2[i]);
}
for(int j = len2; j < len1; j++){
builder.append(words1[j]);
}
return builder.toString();
}else{
for(int i = 0 ; i < len1; i++){
builder.append(words1[i]);
builder.append(words2[i]);
}
for(int j = len1; j < len2; j++){
builder.append(words2[j]);
}
return builder.toString();
}
}
}
(2) Resuelva el problema nuevamente consultando los algoritmos de otras personas:
class Solution {
public String mergeAlternately(String word1, String word2) {
StringBuilder builder = new StringBuilder();
int i = 0; // an indicator
int len1 = word1.length();
int len2 = word2.length();
while(i < len1 || i < len2){
if(i < len1){
builder.append(word1.charAt(i));
}
if(i < len2){
builder.append(word2.charAt(i));
}
i++;
}
return builder.toString();
}
}
Idea de resolución de problemas: es bastante inteligente utilizar un indicador (i) y condiciones de restricción (i < len1) y (i < len2) para evitar problemas fuera de límites si se convierte en una matriz de caracteres.