zoukankan      html  css  js  c++  java
  • Anagrams

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

    Note: All inputs will be in lower-case.

    思路:

    最开始不理解题意。其实题目的意思是看原数组里面是否有些字符串是互相可以通过改变字母顺序转换的。这样的话使用一个map<string, int>,字符串作为key值,保存下标。遍历原数组,每访问一个字符串,先对它进行排序,看map是否有它,如果有的话,就存入结果vector,否则存入map。注意需要一个标记来记录第一个放入map的字符串是否放入结果,放入之前是字符串的下标,放入后改为-1.

    代码:

     1     vector<string> anagrams(vector<string> &strs) {
     2         // IMPORTANT: Please reset any member data you declared, as
     3         // the same Solution instance will be reused for each test case.
     4         vector<string> result;
     5         map<string, int> table;
     6         string tmp;
     7         int n = strs.size();
     8         for(int i = 0; i < n; i++){
     9             tmp = strs[i];
    10             sort(tmp.begin(), tmp.end());
    11             if(table.find(tmp) == table.end()){
    12                 table[tmp] = i;
    13             }
    14             else{
    15                 if(table[tmp] != -1){
    16                     result.push_back(strs[table[tmp]]);
    17                     table[tmp] = -1;
    18                 }
    19                 result.push_back(strs[i]);
    20             }
    21         }
    22         return result;
    23     }
  • 相关阅读:
    http协议
    三次握手四次挥手的原理
    mmap
    I/O多路复用之poll
    I/O多路转接之select
    自旋锁、文件锁、大内核锁
    网络基础(一)
    线程同步之(信号量)
    进程与线程的简单理解
    内存溢出——程序员必备网站
  • 原文地址:https://www.cnblogs.com/waruzhi/p/3418415.html
Copyright © 2011-2022 走看看