zoukankan      html  css  js  c++  java
  • [Leetcode] Anagrams 颠倒字母构成词

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

    Note: All inputs will be in lower-case.

    题意:anagrams的意思是回文构词法。回文构词法有一个特点:单词里的字母的种类和数目没有改变,只是改变了字母的排列顺序。如:

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

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

    思路:因为回文构词法的单词之间仅仅是字母改变了顺序,那么我们可以先对单词进行排序,然后我们就可以通过两个单词之间是否相等,来判断是否为回文构词法形成的。那么如何来判断两个单词相等,若是拿某个单词和之前的逐个进行比较,那么时间复杂度就很高了,这里用到map,这样查找起来就方便多了。那查找之后怎么办了?对数组中的每一个字符串:

    1)若是在map没有找到,则,将其下标存入,以供后面的对比;

    2)若是找到了,先将之前的那个字符串和目前的这个,存入res中。

    针对第二种情况,就存在一个问题了,如何避免已存入的再次存入?我们可以将之前存入的那个在map中对应的值改为-1(小于0即可),然后加一定的条件判断(若是不加条件判断,则,改为-1就没有意义了)。参考了doc_sgl代码如下:

     1 class Solution {
     2 public:
     3     vector<string> anagrams(vector<string> &strs) 
     4     {
     5         vector<string> res;
     6         
     7         unordered_map<string,int> anagram;
     8 
     9         for(int i=0;i<strs.size();++i)
    10         {
    11             string s=strs[i];
    12             sort(s.begin(),s.end());
    13 
    14             if(anagram.find(s)==anagram.end())
    15                 anagram[s]=i;
    16             else
    17             {
    18                 if(anagram[s]>=0)
    19                 {
    20                     res.push_back(strs[anagram[s]]);    //存之前
    21                     anagram[s]=-1;
    22                 }
    23                 res.push_back(strs[i]);     //存现在
    24             }
    25         }
    26         return res;
    27     }
    28 };
  • 相关阅读:
    Charles 弱网测试
    jmespath 教程
    Fiddler查看接口响应时间
    Fiddler如何模拟弱网环境进行测试
    Github 上配置 Personal Token Key
    fiddler抓取app请求
    Charles 设置https 抓包
    PostgreSQL触发器使用实践——数据审计(转载)
    使用aop注解实现表单防重复提交功能(转载)
    转载( Spring Cloud gateway 网关拦截Post请求日志)
  • 原文地址:https://www.cnblogs.com/love-yh/p/7078149.html
Copyright © 2011-2022 走看看