Un anagramma è una parola o una frase ottenuta riarrangiando le lettere di un'altra parola o frase, usando tutte le lettere originali esattamente una volta. Ad esempio, "roma" è un anagramma di "amor," poiché entrambe le parole contengono le stesse lettere, ma in ordine diverso. In questo articolo, vedremo come verificare se una stringa in Go contiene un anagramma di un'altra stringa.
Per prima cosa, è necessario importare il pacchetto "strings" in Go, che ci fornirà alcune funzioni utili per manipolare le stringhe. Creeremo anche una funzione di supporto per convertire una stringa in una mappa di rune, che rappresenterà le lettere della stringa e il loro conteggio.
package main
import (
"fmt"
"strings"
)
// Funzione di supporto per convertire una stringa in una mappa di rune.
func stringToMap(str string) map[rune]int {
charCount := make(map[rune]int)
for _, char := range str {
charCount[char]++
}
return charCount
}
Per verificare se una stringa contiene un anagramma di un'altra stringa, dobbiamo confrontare le mappe di rune delle due stringhe. Se le mappe sono uguali, significa che le due stringhe contengono le stesse lettere con lo stesso conteggio, il che implica che sono anagrammi.
// Funzione per verificare se due mappe di rune sono uguali.
func mapsAreEqual(map1, map2 map[rune]int) bool {
if len(map1) != len(map2) {
return false
}
for key, value1 := range map1 {
if value2, ok := map2[key]; !ok || value1 != value2 {
return false
}
}
return true
}
Ora possiamo creare la funzione principale che utilizzerà le funzioni di supporto per verificare se una stringa contiene un anagramma di un'altra stringa.
// Funzione principale per verificare se una stringa contiene un anagramma di un'altra stringa.
func containsAnagram(mainStr, targetStr string) bool {
mainMap := stringToMap(mainStr)
targetMap := stringToMap(targetStr)
return mapsAreEqual(mainMap, targetMap)
}
Ecco come puoi utilizzare la funzione containsAnagram
per verificare se una stringa contiene un anagramma di un'altra stringa:
func main() {
mainStr := "roma"
targetStr := "amor"
if containsAnagram(mainStr, targetStr) {
fmt.Printf("%s contiene un anagramma di %s\n", mainStr, targetStr)
} else {
fmt.Printf("%s non contiene un anagramma di %s\n", mainStr, targetStr)
}
}
Conclusioni
Verificare se una stringa contiene un anagramma di un'altra stringa in Go è un processo abbastanza semplice se si seguono i passaggi sopra descritti. Utilizzando le mappe di rune e le funzioni di supporto, è possibile scrivere un codice efficiente per risolvere questo problema.