前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >133. 最长单词 一次遍历+vector容器

133. 最长单词 一次遍历+vector容器

作者头像
和蔼的zhxing
发布2018-09-04 13:06:23
2930
发布2018-09-04 13:06:23
举报
文章被收录于专栏:和蔼的张星的图像处理专栏

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

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

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

一次遍历+vector容器

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

代码语言:javascript
复制
 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(),但基本思路是一样的,就是写起来麻烦点,贴在下面,注释齐全:

代码语言:javascript
复制
 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
    }
···
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.12.13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一次遍历+vector容器
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档