zoukankan      html  css  js  c++  java
  • 93 单词替换(648)

    作者: Turbo时间限制: 1S章节: 其它

    晚于: 2020-09-09 12:00:00后提交分数乘系数50%

    问题描述 :

    在英语中,我们有一个叫做 词根(root)的概念,它可以跟着其他一些词组成另一个较长的单词——我们称这个词为 继承词(successor)。例如,词根an,跟随着单词 other(其他),可以形成新的单词 another(另一个)。

    现在,给定一个由许多词根组成的词典和一个句子。你需要将句子中的所有继承词用词根替换掉。如果继承词有许多可以形成它的词根,则用最短的词根替换它。

    你需要输出替换之后的句子。

    示例 1:

    输入:dictionary = ["cat","bat","rat"], sentence = "the cattle was rattled by the battery"

    输出:"the cat was rat by the bat"

    示例 2:

    输入:dictionary = ["a","b","c"], sentence = "aadsfasf absbs bbab cadsfafs"

    输出:"a a b c"

    示例 3:

    输入:dictionary = ["a", "aa", "aaa", "aaaa"], sentence = "a aa a aaaa aaa aaa aaa aaaaaa bbb baba ababa"

    输出:"a a a a a a a a bbb baba a"

    示例 4:

    输入:dictionary = ["catt","cat","bat","rat"], sentence = "the cattle was rattled by the battery"

    输出:"the cat was rat by the bat"

    示例 5:

    输入:dictionary = ["ac","ab"], sentence = "it is abnormal that this solution is accepted"

    输出:"it is ab that this solution is ac"

    可使用以下main函数:

    int main()

    {

        int n;

        vector<string> dict;

        string sentence,word;

        cin>>n;

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

        {

            cin>>word;

            dict.push_back(word);

        }

        cin.get();

        getline(cin, sentence);

        string res=Solution().replaceWords(dict, sentence);

        cout<<res;

    }

    输入说明 :

    首先输入字典的单词数n,

    然后输入n个单词,每个单词均由小写字母组成,长度在1到100之间。

    最后输入一个字符串sentence,

    1 <= sentence.length <= 10^6

    sentence 仅由小写字母和空格组成。

    sentence 中单词的总量在范围 [1, 1000] 内。

    sentence 中每个单词的长度在范围 [1, 1000] 内。

    sentence 中单词之间由一个空格隔开。

    sentence 没有前导或尾随空格。

    输出说明 :

    输出一个字符串

    输入范例 :

    输出范例 :

    #include <iostream>
    #include <string>
    #include <vector>
    #include <unordered_map>
    using namespace std;
    
    class Solution 
    {
    public:
        string replaceWords(vector<string>& dict, string& sentence) 
        {
            unordered_map<string,int> map;
            for(auto i:dict)
                map[i]=1;
            string res="";
            for(int i=0;i<sentence.size();)
            {
                int j=i,flag=0;
                string temp="";
                while(j<sentence.size()&&sentence[j]!=' ')
                {
                    if(!flag)
                        temp+=sentence[j];
                    if(map[temp])
                        flag=1;
                    j++;
                }
                res+=temp;
                if(j<sentence.size())
                    res+=" ";
                i=j+1;
            }
            return res;
        }
    };
    
    int main()
    {
        int n;
        vector<string> dict;
        string sentence,word;
        cin>>n;
        for(int i=0; i<n; i++)
        {
            cin>>word;
            dict.push_back(word);
        }
        cin.get();
        getline(cin, sentence);
        string res=Solution().replaceWords(dict, sentence);
        cout<<res;
    }
  • 相关阅读:
    Linux命令:ls
    Log4j:log4j.properties 配置解析
    PostgreSQL: WITH Queries (Common Table Expressions)
    Linux使用SecureCRT上传下载
    PostgreSQL 自动输入密码
    Linux命令:rmdir
    Linux命令:mkdir
    Linux命令:pwd
    Linux命令:cd
    正则表达式 
  • 原文地址:https://www.cnblogs.com/zmmm/p/13675492.html
Copyright © 2011-2022 走看看