Fork me on GitHub

[leetcode-648-Replace Words]

In English, we have a concept called root, which can be followed by some other words to form another longer word - let's call this word successor. For example, the root an, followed by other, which can form another word another.

Now, given a dictionary consisting of many roots and a sentence. You need to replace all the successor in the sentence with the root forming it. If a successor has many roots can form it, replace it with the root with the shortest length.

You need to output the sentence after the replacement.

Example 1:

Input: dict = ["cat", "bat", "rat"]
sentence = "the cattle was rattled by the battery"
Output: "the cat was rat by the bat"

 

Note:

  1. The input will only have lower-case letters.
  2. 1 <= dict words number <= 1000
  3. 1 <= sentence words number <= 1000
  4. 1 <= root length <= 100
  5. 1 <= sentence words length <= 1000

思路:

思路很朴素,就是将句子里每一个单词从到尾求子串,如果这个子串出现在了dict里,那么就把这个单词替换掉。

string replaceWords(vector<string>& dict, string sentence)
    {
        map<string, string>mpdic;
        for (auto s : dict)mpdic[s] = s;
        vector<string>word;
        stringstream ss(sentence);
        string tmp;
        while (ss >> tmp)word.push_back(tmp);
        for (auto &str : word)
        {
            for (int i = 1; i < str.length();i++)
            {
                if (mpdic.count(str.substr(0,i)))
                {
                    str = str.substr(0, i);
                    break;
                }
            }
        }
        string ret = word[0];
        for (int i = 1; i < word.size();i++)ret += " " + word[i];
        return ret;        
    }

 

posted @ 2017-07-24 16:33  hellowOOOrld  阅读(480)  评论(0编辑  收藏  举报