lintcode

133. 最长单词

2017-12-13  本文已影响4人  和蔼的zhxing

给一个词典,找出其中所有最长的单词。
样例

在词典
{
"dog",
"google",
"facebook",
"internationalization",
"blabla"
}
中, 最长的单词集合为 ["internationalization"]
在词典
{
"like",
"love",
"hate",
"yes"
}
中,最长的单词集合为 ["like", "love", "hate"]

如果只是要最长的一个单词,那么只需要一次遍历即可,这里是要求求出最长单词的集合,稍作改变即可。

一次遍历+vector容器

首先把第一个单词放入容器res,并把第一个单词的大小记作max_size,然后遍历,如果新来的单词的大小比max_size大,那么清空res,并把新单词放入,并且用当前单词的大小来更新max_size。如果新来的单词的大小和max_size想等,那么把当前单词放入即可,这样一遍遍历就可以达到目的,代码写起来也是非常简单:

 vector<string> longestWords(vector<string> &dictionary) 
     {
         vector<string> res;
         int max_size=dictionary[0].size();
         for(auto d:dictionary)
         {
             if(d.size()>max_size)  
             {
                 max_size=d.size();
                 res.clear();
                 res.push_back(d);
             }
             else if(d.size()==max_size)
             {
                 res.push_back(d);
             }
         }
         return res;
     }

我一开始写了一个麻烦的,主要是没想到用vector::clear(),但基本思路是一样的,就是写起来麻烦点,贴在下面,注释齐全:

 vector<string> longestWords(vector<string> &dictionary) 
    {
       vector<int> max_index;   //记录最大长度的索引
       vector<string> res;
       int max_size=0;    //记录当前最大值
       
       //这次遍历挑了大的出来,越大,排的越靠后,因为只有比当前的最大大,才能插入
       for(int i=0;i<dictionary.size();i++)   
       {
           if(dictionary[i].size()>=max_size)
           {
               max_index.push_back(i);
               cout<<*(max_index.end()-1)<<" ";
               max_size=dictionary[i].size();
           }  
           
       }
       
       //如果只有一个的话,肯定这个是最长的,而且应该是第一个
       if(max_index.size()==1)       
       {
           res.push_back(dictionary[max_index[0]]);
           return res;
       }
       else  
      
       //因为是需要一个集合,所以从后往前把长度相同的都插入到res中
       max_size=0;   //记得清零,最后一个一定放进去
       {
           for(auto end=max_index.end()-1;end>=max_index.begin();end--)
           {
               if(dictionary[*end].size()>=max_size)
               {
                   max_size=dictionary[*end].size();
                   res.push_back(dictionary[*end]);
               
               }
               else break;
    
           }
       }
       return res;
        // write your code here
    }
···
上一篇 下一篇

猜你喜欢

热点阅读