C ++中的同义词句子

假设我们有一对等价的同义词和一个句子文本的对,我们必须找到所有可能的同义句子,它们按字典顺序排序。

因此,如果输入像同义词= [[“” happy“,” joy“],[” sad“,” sorrow“],[” joy“,” cheerful“]]]和text =”我今天很快乐,但昨天会感到悲伤”,那么输出将是““我今天很快乐,但昨天感到悲伤”,“我今天很快乐,但昨天感到悲伤”,“我今天很高兴但昨天感到悲伤”,“我今天很高兴但昨天感到悲伤”,“今天我很快乐,但昨天却难过”,“今天我很快乐,但昨天却很悲伤”]

为了解决这个问题,我们将遵循以下步骤-

  • 定义映射的父对象,颜色和groupByColor

  • 定义一个函数find(),需要s,

  • 如果parent [s]与s相同,则-

    • 父母[s]:=查找(父母[s])

  • 返回父母

  • 定义一个函数unionNode(),它将花费a,b,

  • x:=查找(a),y:=查找(b)

  • 如果x与y相同,则-

    • 父母[x]:= y

  • 定义一个数组ans

  • 定义一个函数getString(),这将花费t,

  • 定义阵列温度

  • 结束:= 0

  • curr:=空字符串

  • 对于end <t的大小,更新(将end增加1),请执行-

    • 在临时结束时插入curr

    • curr:=空字符串

    • 忽略以下部分,跳至下一个迭代

    • 如果t [end]与空白空间相同,则-

    • curr:= curr并置t [end]

  • 在临时结束时插入curr

  • 返回温度

  • 定义一个函数dfs(),它将接受字符串,idx,临时用空白字符串初始化它,

  • 如果idx与字符串的大小相同,则-

    • 在ans的末尾插入temp

    • 返回

  • 当前:=字符串[idx]

  • 如果电流不是彩色的,则-

    • dfs(strings,idx + 1,temp + current concatenate((如果idx + 1与字符串的大小相同,则为空白字符串,否则为空格)))

  • 除此以外

    • dfs(strings,idx + 1,temp + z +((如果idx + 1与字符串的大小相同,则为空白字符串,否则为空格)))

    • (将z增加1)

    • 定义一组x = groupByColor [color [current]]

    • 对于x中的每个元素z,执行-

  • 定义功能 seeGroups()

  • 对于groupByColor中的每个元素,执行-

    • (将i增加1)

    • x:= i的秒

    • 定义一套

    • 对于x中的每个元素z-

  • 定义一个函数generateSentences(),它将使用一个2D数组s,另一个字符串t,

  • n:= s的大小

  • 对于初始化i:= 0,当i <n时,更新(将i增加1),执行-

    • 如果y不在父母中,则-

    • unionNode(x,y)

    • x:= s [i,0]

    • y:= s [i,1]

    • 如果x不在父级中,则-

    • c:= 1

    • 对于初始化i:= 0,当i <n时,更新(将i增加1),执行-

      • 将x插入groupByColor [color [x]]

      • 将z插入groupByColor [color [x]]

      • 定义一组SS

      • 将x插入ss

      • 将y插入ss

      • groupByColor [color [x]]:= ss

      • 颜色[y]:= c

      • (将c增加1)

      • x:= s [i,0]

      • z:= s [i,1]

      • y:=查找(x)

      • 如果y不是彩色的,则-

      • 颜色[x]:=颜色[y]

      • 颜色[z]:=颜色[y]

      • 如果color [x]不在groupByColor中,则-

      • 除此以外

      • 定义一个数组字符串= getString(t)

      • dfs(字符串,0)

      • 排序数组ans

      • 返回ans

      例 

      让我们看下面的实现以更好地理解-

      #include <bits/stdc++.h>

      using namespace std;

      void print_vector(vector<auto< v){

         cout << "[";

         for(int i = 0; i<v.size(); i++){

            cout << v[i] << ", ";

         }

         cout << "]"<<endl;

      }

      class Solution {

      public:

         map <string, string> parent;

         map <string, int> color;

         map <int, set<string<> groupByColor;

         string find(string s){

            if(parent[s] == s)return s;

               parent[s] = find(parent[s]);

            return parent[s];

         }

         void unionNode(string a, string b){

            string x = find(a);

            string y = find(b);

            if(x == y)return;

               parent[x] = y;

         }

         vector <string< ans;

         vector <string< getString(string t){

            vector <string< temp;

            int end = 0;

            string curr = "";

            for(;end < t.size(); end++){

               if(t[end] == ' '){

                  temp.push_back(curr);

                  curr = "";

                  continue;

               }

               curr += t[end];

            }

            temp.push_back(curr);

            return temp;

         }

         void dfs(vector <string< &strings, int idx, string temp = ""){

            if(idx == strings.size()){

               ans.push_back(temp);

               return;

            }

            string current = strings[idx];

            if(color.find(current) == color.end()){

               dfs(strings, idx + 1, temp + current + (idx+1 == strings.size()?"":" "));

            }

            else{

               set <string< x = groupByColor[color[current]];

               set <string< :: iterator z = x.begin();

               while(z != x.end()){

                  dfs(strings, idx + 1, temp + *z + (idx+1 == strings.size()?"":" "));

                  z++;

               }

            }

         }

         void seeGroups(){

            map <int, set <string< > :: iterator i = groupByColor.begin();

            while(i != groupByColor.end()){

               set <string< x = i->second;

               set <string< :: iterator z = x.begin();

               while(z != x.end()){

                  z++;

               }

               cout << endl;

               i++;

            }

         }

         vector<string< generateSentences(vector<vector<string<>& s, string t) {

            int n = s.size();

            for(int i = 0; i < n; i++){

               string x = s[i][0];

               string y = s[i][1];

               if(parent.find(x) == parent.end())parent[x] = x;

                  if(parent.find(y) == parent.end())parent[y] = y;

                     unionNode(x,y);

            }

            int c = 1;

            for(int i = 0; i < n; i++){

               string x = s[i][0];

               string z = s[i][1];

               string y = find(x);

               if(color.find(y) == color.end()){

                  color[y] = c;

                  c++;

               }

               color[x] = color[y];

               color[z] = color[y];

               if(groupByColor.find(color[x]) == groupByColor.end()){

                  set <string< ss;

                  ss.insert(x);

                  ss.insert(y);

                  groupByColor[color[x]] = ss;

               }

               else{

                  groupByColor[color[x]].insert(x);

                  groupByColor[color[x]].insert(z);

               }

            }

            vector <string< strings = getString(t);

            dfs(strings, 0);

            sort(ans.begin(), ans.end());

            return ans;

         }

      };

      main(){

         Solution ob;

         vector<vector<string<> v = {{"happy","joy"},{"sad","sorrow"},{"joy","cheerful"}};

         print_vector(ob.generateSentences(v, "I am happy today but was sad yesterday"));

      }

      输入值

      [["happy","joy"],["sad","sorrow"],["joy","cheerful"]] "I am happy today but was sad yesterday"

      输出结果

      [I am cheerful today but was sad yesterday, I am cheerful today but was sorrow yesterday, I am happy today but was sad yesterday, I am happy today but was sorrow yesterday, I am joy today but was sad yesterday, I am joy today but was sorrow yesterday, ]

      以上是 C ++中的同义词句子 的全部内容, 来源链接: utcz.com/z/316061.html

      回到顶部