最长单词
题目描述:
给一个词典,找出其中所有最长的单词。
{
“dog”,
“google”,
“facebook”,
“internationalization”,
“blabla”
}
中, 最长的单词集合为 [“internationalization”]
在词典
{
“like”,
“love”,
“hate”,
“yes”
}
中,最长的单词集合为 [“like”, “love”, “hate”]
解题思路:
version 1:
题目中所描述的问题无非就是在给定的数组中找到所有最大值的索引,第一个版本,遍历两遍,这个很好想。
第一次遍历找出最大值,第二次遍历与最大值进行比较,将相等位置的索引记录下来;
version2:
相比于version1,此版本的解法只需要一次遍历即可,初始化max_value;如果比最大值大,则先清空存储位置索引的数组,如果和最大值相等,则记录该位置;
vector<string> longestWords(vector<string> &dictionary) {
// write your code here
vector<string> result_vec;
if (dictionary.empty())
{
return result_vec;
}
//用来存放最大值所出现的位置,初始化为其实位置
vector<int> pos_vec;
pos_vec.push_back(0);
//初始化其实位置的单词长度最大
int max_length = dictionary[0].size();
for (size_t i = 1; i < dictionary.size(); i++)
{
//如果出现了更大的值,则先将pos_vec清空后重新赋值
if (max_length < dictionary[i].size())
{
max_length = dictionary[i].size();
pos_vec.clear();
}
if (max_length == dictionary[i].size())
{
pos_vec.push_back(i);
}
}
for (size_t i = 0; i < pos_vec.size(); i++)
{
result_vec.push_back(dictionary[pos_vec[i]]);
}
return result_vec;
}