Cambia il genere di una determinata stringa
Cambia il genere della stringa, ovvero attiva tutte le parole specifiche per genere nella stringa di input.
Esempi:
Input: she is my sister Output: he is my brother. There are two gender-specific words in this sentence:she and sister. After toggling gender specific words to their respective counterparts - he and brother : Gender specific words of the string are now changed.
Algoritmo:
- Mantieni una mappa hash che associa tutte le parole femminili alle parole maschili e tutte le parole maschili a quelle femminili.
- Quindi per ogni parola nella stringa controlliamo se si tratta di una parola specifica per genere o meno. Se lo è, scambiamo questa parola con la sua parola controparte. Altrimenti non scambiamo questa parola.
- Tutte le parole vengono concatenate in una nuova stringa che alla fine viene stampata ed è la nostra stringa richiesta.
// A C++ Program to change the gender of a string #include using namespace std ; // A Function that returns the new string with gender // changed string changeGender ( string str ) { // A Dictionary to store the mapping of genders // The user can add his words too. unordered_multimap < string string > dictionary = { { 'batman' 'batwoman' } { 'batwoman' 'batman' } { 'boy' 'girl' } { 'girl' 'boy' } { 'boyfriend' 'girlfriend' } { 'girlfriend' 'boyfriend' } { 'father' 'mother' } { 'mother' 'father' } { 'husband' 'wife' } { 'wife' 'husband' } { 'he' 'she' } { 'she' 'he' } { 'his' 'her' } { 'her' 'his' } { 'male' 'female' } { 'female' 'male' } { 'man' 'woman' } { 'woman' 'man' } { 'Mr' 'Ms' } { 'Mr' 'Ms' } { 'sir' 'madam' } { 'madam' 'sir' } { 'son' 'daughter' } { 'daughter' 'son' } { 'uncle' 'aunt' } { 'aunt' 'uncle' } }; str = str + ' ' ; // Append a space at the end int n = str . length (); // 'temp' string will hold the intermediate words // and 'ans' string will be our result string temp = '' ans = '' ; for ( int i = 0 ; i <= n -1 ; i ++ ) { if ( str [ i ] != ' ' ) temp . push_back ( str [ i ]); else { // If this is a 'male' or a 'female' word then // swap this with its counterpart if ( dictionary . find ( temp ) != dictionary . end ()) temp = dictionary . find ( temp ) -> second ; ans = ans + temp + ' ' ; temp . clear (); } } return ( ans ); } // Driver Program to test above functions int main () { string str = 'she is going to watch movie with' ' her boyfriend' ; cout < < changeGender ( str ); return ( 0 ); }
Java import java.util.HashMap ; import java.util.Map ; public class ChangeGender { // A Function that returns the new string with gender changed public static String changeGender ( String str ) { // A Map to store the mapping of genders // The user can add his words too. Map < String String > dictionary = new HashMap <> (); dictionary . put ( 'batman' 'batwoman' ); dictionary . put ( 'batwoman' 'batman' ); dictionary . put ( 'boy' 'girl' ); dictionary . put ( 'girl' 'boy' ); dictionary . put ( 'boyfriend' 'girlfriend' ); dictionary . put ( 'girlfriend' 'boyfriend' ); dictionary . put ( 'father' 'mother' ); dictionary . put ( 'mother' 'father' ); dictionary . put ( 'husband' 'wife' ); dictionary . put ( 'wife' 'husband' ); dictionary . put ( 'he' 'she' ); dictionary . put ( 'she' 'he' ); dictionary . put ( 'his' 'her' ); dictionary . put ( 'her' 'his' ); dictionary . put ( 'male' 'female' ); dictionary . put ( 'female' 'male' ); dictionary . put ( 'man' 'woman' ); dictionary . put ( 'woman' 'man' ); dictionary . put ( 'Mr' 'Ms' ); dictionary . put ( 'Ms' 'Mr' ); dictionary . put ( 'sir' 'madam' ); dictionary . put ( 'madam' 'sir' ); dictionary . put ( 'son' 'daughter' ); dictionary . put ( 'daughter' 'son' ); dictionary . put ( 'uncle' 'aunt' ); dictionary . put ( 'aunt' 'uncle' ); str = str + ' ' ; // Append a space at the end int n = str . length (); // 'temp' string will hold the intermediate words // and 'ans' string will be our result String temp = '' ans = '' ; for ( int i = 0 ; i <= n - 1 ; i ++ ) { if ( str . charAt ( i ) != ' ' ) temp += str . charAt ( i ); else { // If this is a 'male' or a 'female' word then // swap this with its counterpart if ( dictionary . containsKey ( temp )) temp = dictionary . get ( temp ); ans = ans + temp + ' ' ; temp = '' ; } } return ans ; } // Driver Program to test above functions public static void main ( String [] args ) { String str = 'she is going to watch movie with her boyfriend' ; System . out . println ( changeGender ( str )); } }
Python # A Python program to change the gender of a string # A Function that returns the new string with gender changed def change_gender ( string ): # A Dictionary to store the mapping of genders # The user can add his words too. dictionary = { 'batman' : 'batwoman' 'batwoman' : 'batman' 'boy' : 'girl' 'girl' : 'boy' 'boyfriend' : 'girlfriend' 'girlfriend' : 'boyfriend' 'father' : 'mother' 'mother' : 'father' 'husband' : 'wife' 'wife' : 'husband' 'he' : 'she' 'she' : 'he' 'his' : 'her' 'her' : 'his' 'male' : 'female' 'female' : 'male' 'man' : 'woman' 'woman' : 'man' 'Mr' : 'Ms' 'Ms' : 'Mr' 'sir' : 'madam' 'madam' : 'sir' 'son' : 'daughter' 'daughter' : 'son' 'uncle' : 'aunt' 'aunt' : 'uncle' } string += ' ' # Append a space at the end n = len ( string ) # 'temp' string will hold the intermediate words # and 'ans' string will be our result temp = '' ans = '' for i in range ( n ): if string [ i ] != ' ' : temp += string [ i ] else : # If this is a 'male' or a 'female' word then # swap this with its counterpart if temp in dictionary : temp = dictionary [ temp ] ans += temp + ' ' temp = '' return ans # Driver Program to test above functions if __name__ == '__main__' : string = 'she is going to watch movie with her boyfriend' print ( change_gender ( string ))
C# using System ; using System.Collections.Generic ; class Program { static string ChangeGender ( string str ) { // A Dictionary to store the mapping of genders // The user can add his words too. Dictionary < string string > dictionary = new Dictionary < string string > { { 'batman' 'batwoman' } { 'batwoman' 'batman' } { 'boy' 'girl' } { 'girl' 'boy' } { 'boyfriend' 'girlfriend' } { 'girlfriend' 'boyfriend' } { 'father' 'mother' } { 'mother' 'father' } { 'husband' 'wife' } { 'wife' 'husband' } { 'he' 'she' } { 'she' 'he' } { 'his' 'her' } { 'her' 'his' } { 'male' 'female' } { 'female' 'male' } { 'man' 'woman' } { 'woman' 'man' } { 'Mr' 'Ms' } { 'Ms' 'Mr' } { 'sir' 'madam' } { 'madam' 'sir' } { 'son' 'daughter' } { 'daughter' 'son' } { 'uncle' 'aunt' } { 'aunt' 'uncle' } }; str += ' ' ; // Append a space at the end int n = str . Length ; // 'temp' string will hold the intermediate words // and 'ans' string will be our result string temp = '' ans = '' ; for ( int i = 0 ; i <= n - 1 ; i ++ ) { if ( str [ i ] != ' ' ) { temp += str [ i ]; } else { // If this is a 'male' or a 'female' word then // swap this with its counterpart if ( dictionary . ContainsKey ( temp )) { temp = dictionary [ temp ]; } ans += temp + ' ' ; temp = '' ; } } return ans ; } static void Main ( string [] args ) { string str = 'she is going to watch movie with her boyfriend' ; Console . WriteLine ( ChangeGender ( str )); Console . ReadKey (); } }
JavaScript // A Function that returns the new string with gender // changed function changeGender ( str ) { // A Dictionary to store the mapping of genders // The user can add his words too. const dictionary = new Map ([ [ 'batman' 'batwoman' ] [ 'batwoman' 'batman' ] [ 'boy' 'girl' ] [ 'girl' 'boy' ] [ 'boyfriend' 'girlfriend' ] [ 'girlfriend' 'boyfriend' ] [ 'father' 'mother' ] [ 'mother' 'father' ] [ 'husband' 'wife' ] [ 'wife' 'husband' ] [ 'he' 'she' ] [ 'she' 'he' ] [ 'his' 'her' ] [ 'her' 'his' ] [ 'male' 'female' ] [ 'female' 'male' ] [ 'man' 'woman' ] [ 'woman' 'man' ] [ 'Mr' 'Ms' ] [ 'Ms' 'Mr' ] [ 'sir' 'madam' ] [ 'madam' 'sir' ] [ 'son' 'daughter' ] [ 'daughter' 'son' ] [ 'uncle' 'aunt' ] [ 'aunt' 'uncle' ] ]); str = str + ' ' ; // Append a space at the end const n = str . length ; // 'temp' string will hold the intermediate words // and 'ans' string will be our result let temp = '' ans = '' ; for ( let i = 0 ; i <= n - 1 ; i ++ ) { if ( str [ i ] != ' ' ) temp += str [ i ]; else { // If this is a 'male' or a 'female' word then // swap this with its counterpart if ( dictionary . has ( temp )) temp = dictionary . get ( temp ); ans = ans + temp + ' ' ; temp = '' ; } } return ( ans ); } // Driver Program to test above function const str = 'she is going to watch movie with her boyfriend' ; console . log ( changeGender ( str ));
Produzione
he is going to watch movie with his girlfriend
Complessità temporale: O(N^2) dove N è la lunghezza della stringa poiché l'operatore '+'/'append' della stringa può richiedere fino a O(N) tempo e presupponendo che la ricerca nel dizionario richieda O(1) tempo nel caso peggiore.
Spazio ausiliario: A parte il dizionario che associa tutte le parole alla sua controparte, dichiariamo lo spazio O(N) per la nuova stringa dove N è la lunghezza della stringa di input.
Possibilità di miglioramento:
- Possiamo aggiungere più parole e le loro controparti nel dizionario per aumentare la precisione del programma. Ad esempio possiamo aggiungere – attore attrice dio dea al nostro dizionario.
- È inoltre possibile importare un file di testo contenente tutte le parole femminili e maschili.
- Il programma può essere modificato per non fare distinzione tra maiuscole e minuscole.