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.

    思路:

    面试过更简单的形式,判断两个string是否是anagram。当时用的hashmap做的。key是character,value是出现的次数。先扫描第一个string建立这个hashmap,然后扫描第二个string,看是否最后hashmap的所有value都为0. 这样做的时间复杂度是m+n.因为扫描两个string各一次。

    但是对于这道题,就不能这么做了。如果要找出所有的group,那么就需要拿出一个string然后和剩下的所有string做比较。然后剔除掉,再反复比较。

    所以我们想到另一种方法。我们把每一个string变为char型数组,并且按字母顺序排序。这样扫描一下就知道这两个string是否相同了。我们把结果存在HashMap里。key是char型数组所转化得到的string。value就是一个arraylist存着是anagram的string

     1     public List<String> anagrams(String[] strs) {
     2         List<String> res = new ArrayList<String>();
     3         if (strs == null || strs.length == 0) {
     4             return res;
     5         }
     6         HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
     7         for (String t : strs) {
     8             char[] charArray = t.toCharArray();
     9             Arrays.sort(charArray);
    10             String temp = new String(charArray);
    11             if (map.containsKey(temp)) {
    12                 map.get(temp).add(t);
    13             }else{
    14                 ArrayList<String> newItem = new ArrayList<String>();
    15                 newItem.add(t);
    16                 map.put(temp, newItem);
    17             }
    18         }
    19         for (ArrayList<String> group : map.values()) {
    20             if (group.size() > 1) {
    21                 res.addAll(group);
    22             }
    23         }
    24         return res;
    25     }
  • 相关阅读:
    物理好题随想
    学案12:电场强度和静电现象
    vscode插件记录
    windows使用总结
    元素周期律 + 元素周期表
    酸碱理论
    氮族元素——磷
    氮族元素——氮
    碱金属元素
    SDN第一次上机实验
  • 原文地址:https://www.cnblogs.com/gonuts/p/4475138.html
Copyright © 2011-2022 走看看