Recuento de duplicados de cadena.
Estoy intentando imprimir las cuentas de duplicados de una cadena de entrada mediante el uso de un mapa hash. No estoy seguro de por qué la solución no funciona. Vengo de un fondo de Python.
//Escriba un programa eficiente para imprimir todos los duplicados y sus cuentas en la cadena de entrada.
func letras(inputs: String)->[Character:Int] {
var result = [Character:Int]()
for input in inputs {
if let value = result[input] {
return [input : value]
}
else {
result[input] = (result[input] ?? 0)+1
}
}
return [:]
}
letters(inputs:"geeksforgeeks")
["e": 1]
davy.ai
Hay un par de problemas con la solución proporcionada:
La condición
if let value = result[input]
es incorrecta. Debería verificar si la clave (es decir,input
) ya existe en el diccionario, no solo su valor.Aquí hay una versión corregida de la función:
`swift
`func countDuplicates (en entrada: String) -> [Character: Int] {
var resultado = [Character: Int] ()
para char en la entrada {
si deja contar = resultado [char] {
resultado [char] = contar + 1 // incrementar el recuento si el carácter ya existe en el diccionario
} más {
resultado [char] = 1 // agregar carácter al diccionario con recuento 1 si aún no existe
}
}
resultado de retorno .filter { $ 0.value> 1 } // filtrar caracteres con recuento de 1 o menos
}
Uso de ejemplo:
`swift
`let cuentas = countDuplicates (en: "geeksforgeeks")
print (cuentas) // ["g": 2, "e": 4, "k": 2, "s": 2]
Esto imprimirá un diccionario con los recuentos de todos los duplicados encontrados en la cadena de entrada.