주어진 문자열의 성별 변경

문자열의 성별을 변경합니다. 즉, 입력 문자열에서 모든 성별 관련 단어를 전환합니다. 

예:

  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은 문자열의 길이입니다. 문자열의 '+'/ '추가' 연산자는 최대 O(N) 시간이 걸릴 수 있으며 사전에서 조회하는 데 O(1) 최악의 경우 시간이 걸린다고 가정합니다. 

보조 공간: 모든 단어를 해당 단어에 매핑하는 사전과는 별도로 새 문자열에 대해 O(N) 공간을 선언합니다. 여기서 N은 입력 문자열의 길이입니다. 

개선 범위:

  • 프로그램의 정확성을 높이기 위해 더 많은 단어와 해당 단어를 사전에 추가할 수 있습니다. 예를 들어, 배우 배우 신 여신을 사전에 추가할 수 있습니다.
  • 모든 여성 및 남성 단어의 텍스트 파일을 가져올 수도 있습니다.
  • 대소문자를 구분하지 않도록 프로그램을 수정할 수 있습니다.