在英语中,我们有一个名为词根(root)的概念,可以接其他一些词来形成另一个更长的词 - 让我们称这个词为后继词。 例如,词根a,后面接上其他词,可以形成另一个词。
现在,给出一个由许多词根和一个句子组成的字典。 你需要用形成它的次根替换句子中的所有后继词。 如果后继次有许多根可以形成它,则用最短长度的词根替换它。
替换后输出完整的句子。
样例
样例1:
输入:
dict = ["cat", "bat", "rat"]
sentence = "the cattle was rattled by the battery"
输出:
"the cat was rat by the bat"
样例 2:
输入:
dict = ["go", "begin", "make","end"]
sentence = "a good beginning makes a good ending"
输出:
"a go begin make a go end"
注意事项
输入只有小写字母。
1 <= 字典单词个数 <= 1000
1 <= 句子单词个数 <= 1000
1 <= 词根长度 <= 100
1 <= 句子单词长度 <= 1000
bool mycmp(string& A, string& B)
{
if(A.size() < B.size())
return true;
return false;
}
class Solution {
public:
/**
* @param dict: List[str]
* @param sentence: a string
* @return: return a string
*/
string replaceWords(vector<string> &dict, string &A) {
// write your code here
string ret;
string tmp = "";
for(int i = 0; i < A.size(); i++)
{
if(A[i] == ' ')
{
//mymap1[tmp]++;
vector<string> can;
for(int i = 0; i < dict.size(); i++)
{
if(tmp.find(dict[i]) == 0)
{
can.push_back(dict[i]);
}
}
if(can.size() == 0)
{
ret = ret + tmp + ' ';
}
else if(can.size() == 1)
{
ret = ret + can[0] + ' ';
}
else if(can.size() > 1)
{
sort(can.begin(), can.end(), mycmp);
ret = ret + can[0] + ' ';
}
tmp = "";
}
else
{
tmp = tmp + A[i];
if(i == A.size() - 1)
{
//mymap1[tmp]++;
vector<string> can;
for(int i = 0; i < dict.size(); i++)
{
if(tmp.find(dict[i]) == 0)
{
can.push_back(dict[i]);
}
}
if(can.size() == 0)
{
ret = ret + tmp + ' ';
}
else if(can.size() == 1)
{
ret = ret + can[0] + ' ';
}
else if(can.size() > 1)
{
sort(can.begin(), can.end(), mycmp);
ret = ret + can[0] + ' ';
}
}
}
}
ret.erase(ret.size()-1,1);
return ret;
}
};