• [leetcode]Anagrams


    Anagrams

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

    Note: All inputs will be in lower-case.

    编程珠玑中的一道题,书中的解法很巧妙,我就直接搬来用了,时间空间复杂度都是O(n)

    算法思路:

    将每一个单词初始化,记录每个字符的个数,比如aaabca,初始化为a4b1c1。(也可以用排序做初始化,但是时间复杂度略高)

    互为Anagrams的单词的初始化字符串是相同的

     1 public class Solution {
     2     public List<String> anagrams(String[] strs) {
     3         Map<String,List<String>> map = new HashMap<String,List<String>>();
     4         for(String s : strs){
     5             String init = initial(s);
     6             if(map.get(init) == null){
     7                 List<String> list = new ArrayList<String>();
     8                 list.add(s);
     9                 map.put(init,list);
    10             }else{
    11                 map.get(init).add(s);
    12             }
    13         }
    14         List<String> res = new ArrayList<String>();
    15         for(List<String> list : map.values()){
    16             if(list.size() > 1){
    17                 res.addAll(list);
    18             }
    19         }
    20         return res;
    21     }
    22     private String initial(String s){
    23         
    24         int[] hash = new int[26];
    25         
    26         for(char c : s.toCharArray()){
    27             hash[c - 'a']++;
    28         }
    29         StringBuilder sb = new StringBuilder();
    30         for(int i = 0; i < 26; i++){
    31             if(hash[i] > 0){
    32                 sb.append((char)('a' + i ) ).append(hash[i]);
    33             }
    34         }
    35         return sb.toString();
    36     }
    37 }
  • 相关阅读:
    C++设计模式——代理模式
    C++设计模式——享元模式
    C++设计模式——外观模式
    C++设计模式——装饰模式
    C++设计模式——组合模式
    C++设计模式——桥接模式
    C++设计模式——适配器模式
    C++设计模式——原型模式
    云服务器和虚拟主机的区别
    ES6的Module系统
  • 原文地址:https://www.cnblogs.com/huntfor/p/3885747.html
Copyright © 2020-2023  润新知