Wednesday, July 3, 2024
HomeData ModellingData Structure & AlgorithmChange gender of a given string

Change gender of a given string

Change gender of string i.e toggle all the gender-specific words in the input string. 

Examples:

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.

Algorithm:

  • Maintain a hash-map which maps all the “female” words to the “male” words and all the “male” words to “female” ones.
  • Then for each word in the string, we check whether this is a gender-specific word or not. If it is then we swap this word with its counterpart word. Else we don’t swap this word.
  • All the words gets concatenated in a new string, which at the end is printed and is our required string.

CPP




// A C++ Program to change the gender of a string
#include<bits/stdc++.h>
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));


Output

he is going to watch movie with his girlfriend 

Time Complexity: O(N^2), where N is the length of the string, as the ‘+’/ ‘append’ operator of the string can take upto O(N) time and assuming that lookup in the dictionary takes O(1) worse case time. 

Auxiliary Space: Apart from the dictionary that maps all the words to its counterpart, we declare O(N) space for the new string, where N is the length of input string. 

Scope for Improvement:

  • We can add more words and their counterparts in the dictionary to increase the accuracy of the program. For example, we can add – “actor , actress” , “god , goddess” to our dictionary.
  • A text file of words of all female and male words can also be imported.
  • The program can be modified to become case insensitive.

If you like neveropen and would like to contribute, you can also write an article using write.neveropen.co.za or mail your article to review-team@neveropen.co.za. See your article appearing on the neveropen main page and help other Geeks. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

Calisto Chipfumbu
Calisto Chipfumbuhttp://cchipfumbu@gmail.com
I have 5 years' worth of experience in the IT industry, primarily focused on Linux and Database administration. In those years, apart from learning significant technical knowledge, I also became comfortable working in a professional team and adapting to my environment, as I switched through 3 roles in that time.
RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments