zoukankan      html  css  js  c++  java
  • LeetCode ---Anagrams() 详解

    Notice:

    Given an array of strings, return all groups of strings that are anagrams.

    Note: All inputs will be in lower-case.

    For example:

    Input:  ["tea","and","ate","eat","den"]

    Output:   ["tea","ate","eat"]

    Interface: vector<string>anagrams(vector<string>&strs);

    解题思路:

    有相同字母构成的不同序列的单词,排过序后肯定是一样的,所以可以存放在map中,最后从map中取出value个数大于1的值,也就是字母相同构成的字母“们”

    举个例子["ate","tea","aet","eat","hgt","gf","atg","gat"]对于这个容器而言,我们先对ate字典排序,变成aet,然后放入map中,这里的map构造为

    map<string,vector<string>>

    对7个单词遍历后,map的构成如下:

    key        value[0] value[1] value[2] value[3]

    aet    ate         tea         aet         eat

    ght       hgt

    fg         gf

    agt        atg        gat

    之后遍历map,对于value个数大于1的单词“们”放入res数组中,

    最后res数组中即为那些Anagrams

     这里会输出两组 Anagrams

     1 class Solution{
     2 public:
     3   vector<string> anagrams(vector<string> &strs){
     4     map<string,vector<string>> m;
     5     vector<string> res;
     6     for(int i = 0; i < strs.size() ; i++){
     7       string s = strs[i];
     8       sort(s.begin(),s.end());//排序
     9       m[s].push_back(strs[i]);//插入map
    10     }
    11 
    12     for(map<string,vector<string>>::iterator i = m.begin(); i != m.end(); i++){
    13       if((i->second).size() > 1)
    14         for(int it = 0; it < (i->second).size();it++)
    15           res.push_back((i->second)[it]);//输出
    16     }
    17     return res;
    18   }
    19 };

    PS:必须深入理解STL中,map的用法,key-value可以取各种类型包括容器类型。size()等内建函数也是通用的。

     
     
  • 相关阅读:
    Android作业10/21
    Android作业10/07
    Android作业0930
    Android作业 0923
    第四周作业
    第七周
    第六周
    第四周作业
    3.10第二次
    jsp第一次作业
  • 原文地址:https://www.cnblogs.com/134feilei/p/3833715.html
Copyright © 2011-2022 走看看