שנה את מין המחרוזת, כלומר החלף את כל המילים הספציפיות למגדר במחרוזת הקלט.
הפקודה העליונה של unix
דוגמאות:
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.
אַלגוֹרִיתְם:
- שמור על מפת חשיש שממפה את כל המילים הנשיות למילים הגבריות וכל המילים הזכריות לנקבות.
- ואז עבור כל מילה במחרוזת אנו בודקים אם זו מילה ספציפית למגדר או לא. אם זה, אנו מחליפים את המילה הזו במילה המקבילה שלה. אחרת אנחנו לא מחליפים את המילה הזו.
- כל המילים משתרכות במחרוזת חדשה אשר בסוף מודפס והיא המחרוזת הנדרשת שלנו.
// 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 הוא אורך מחרוזת הקלט.
מעבר של עץ בינארי לפי סדר
היקף לשיפור:
- אנו יכולים להוסיף מילים נוספות ומקבילותיהן במילון כדי להגדיל את דיוק התוכנית. לדוגמא אנו יכולים להוסיף - שחקנית השחקנית אל אל אלוהי המילון שלנו.
- ניתן לייבא גם קובץ טקסט של מילים של כל המילים הנשיות והגבריות.
- ניתן לשנות את התוכנית כדי להפוך לבלתי רגישות.