389. Halla la diferencia
Dadas dos cadenas s y t, solo contienen letras minúsculas.
La cadena t se reordena aleatoriamente por la cadena s, y luego se agrega una letra en una posición aleatoria.
Encuentre la letra agregada en t.
Ejemplo 1:
Entrada: s = "abcd", t = "abcde"
Salida: "e"
Explicación: 'e' es la letra que se agregó.
Ejemplo 2:
Entrada: s = "", t = "y"
Salida: "y"
Ejemplo 3:
Entrada: s = "a", t = "aa"
Salida: "a"
Ejemplo 4:
Entrada: s = "ae", t = "aea"
Salida: "a"
提示:
0 <= s.length <= 1000
t.length == s.length + 1
s 和 t 只包含小写字母
responder:
Intuitivamente, puede usar una tabla hash para almacenar el número de ocurrencias de cada letra de la matriz y luego comparar el número de ocurrencias una por una, es decir, usar dos tablas hash; también puede usar solo una tabla hash para permitir que la la matriz se "almacena" y la matriz t se "elimina".
Código:
char findTheDifference(char * s, char * t){
int hash[26]={
0};
for(int i=0;i<strlen(s);i++)
{
hash[s[i]-'a']++;
}
for(int i=0;i<strlen(t);i++)
{
hash[t[i]-'a']--;
}
char temp;
for(int i=0;i<26;i++)
{
if(hash[i]==-1)
{
temp = i+'a';
return temp;
}
}
return 1;
}
Más tarde, descubrí que se puede optimizar, no es necesario "guardar", y luego comparar después de "eliminar". Cuando pueda eliminar, realice el proceso de comparación. Una vez que encuentre una diferencia, puede saltar inmediatamente. Y esto también ahorra una temperatura variable intermedia.
Código:
char findTheDifference(char * s, char * t){
int hash[26]={
0};
for(int i=0;i<strlen(s);i++)
{
hash[s[i]-'a']++;
}
for(int i=0;i<strlen(t);i++)
{
hash[t[i]-'a']--;
if(hash[t[i]-'a']==-1)
{
return t[i];
}
}
return 1;
}