• 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     }
  • 相关阅读:
    java.lang.NoClassDefFoundError: org/apache/poi/ss/formula/udf/UDFFinder
    IntelliJ使用指南—— 深入了解IntelliJ的Web部署逻辑
    javascript深入理解js闭包
    git commit -F时用到的commit.log模板
    github上需要生成密钥对:ssh key
    windows和linux字体库位置
    .vimrc配置文件
    iw交叉编译
    libnl和libopenssl,hostapd交叉编译
    linux中断
  • 原文地址:https://www.cnblogs.com/gonuts/p/4475138.html
Copyright © 2020-2023  润新知