שנה מין של מחרוזת נתונה

שנה את מין המחרוזת, כלומר החלף את כל המילים הספציפיות למגדר במחרוזת הקלט. 

דוגמאות:

  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. 

אַלגוֹרִיתְם:

  • שמור על מפת חשיש שממפה את כל המילים הנשיות למילים הגבריות וכל המילים הזכריות לנקבות.
  • ואז עבור כל מילה במחרוזת אנו בודקים אם זו מילה ספציפית למגדר או לא. אם זה, אנו מחליפים את המילה הזו במילה המקבילה שלה. אחרת אנחנו לא מחליפים את המילה הזו.
  • כל המילים משתרכות במחרוזת חדשה אשר בסוף מודפס והיא המחרוזת הנדרשת שלנו.
CPP
   // 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  ));   

תְפוּקָה
he is going to watch movie with his girlfriend  

מורכבות זמן: O (n^2) כאשר n הוא אורך המחרוזת כמפעיל '+'/ 'הוספה' של המיתר יכול לקחת זמן עד (n) ולהניח שהחיפוש במילון לוקח זמן גרוע יותר. 

שטח עזר: מלבד המילון שממפה את כל המילים למקבילו אנו מכריזים על שטח O (n) עבור המיתר החדש בו n הוא אורך מחרוזת הקלט. 

היקף לשיפור:

  • אנו יכולים להוסיף מילים נוספות ומקבילותיהן במילון כדי להגדיל את דיוק התוכנית. לדוגמא אנו יכולים להוסיף - שחקנית השחקנית אל אל אלוהי המילון שלנו.
  • ניתן לייבא גם קובץ טקסט של מילים של כל המילים הנשיות והגבריות.
  • ניתן לשנות את התוכנית כדי להפוך לבלתי רגישות.