• 【leetcode刷题笔记】Anagrams


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

    Note: All inputs will be in lower-case.


    题解:

    所谓的anagrams,只若干个词,它们包含的字母的个数和种类完全一样,只是字符的顺序不一样。比如说bus,usb,sub就是一组angrams。同一组angrams具有排序后相同的特点,比如对上述三个单词按字典序排序分别得到bsu,bsu,bsu。我们用这一点判断两个单词是否是一组angrams。

    题目给出一个String数组,要求找出其中所有angrams组,并把它们放在同一个list中返回。

    比如给定输入[usb,tea,eat,that,bus,sub,and],应该返回输入[usb,bus,sub,tea,eat]。

    利用map解这道题,其中key是单词按照字典序排序后得到的单词,value是排序后为key的单词在strs中索引。比如上述的例子里对应的map如下表所示:

    key             value        
    bsu 0,4,5
    aet 1,2
    ahtt 3
    adn 6

    然后遍历map,把value对应的list长度大于1的list对应的元素放入answer list中即可。

    代码如下:

     1 public class Solution {
     2     public List<String> anagrams(String[] strs) {
     3         HashMap<String, ArrayList<Integer>> map = new HashMap<String, ArrayList<Integer>>();
     4         for(int i = 0;i < strs.length;i++){
     5             String s = strs[i];
     6             char[] chars = s.toCharArray();
     7             Arrays.sort(chars);
     8             String key = new String(chars);
     9             if(map.containsKey(key))
    10             {
    11                 ArrayList<Integer> value = map.get(key);
    12                 value.add(i);
    13                 map.put(key, value);
    14             }
    15             else{
    16                 ArrayList<Integer> strings = new ArrayList<Integer>();
    17                 strings.add(i);
    18                 map.put(key, strings);
    19             }
    20         }
    21         
    22         List<String> answer = new ArrayList<String>();
    23         
    24         for(Map.Entry<String, ArrayList<Integer>> entry:map.entrySet()){
    25             ArrayList<Integer> temp = entry.getValue();
    26             if(temp.size() > 1){
    27                 for(int i = 0;i < temp.size();i++)
    28                     answer.add(strs[temp.get(i)]);
    29             }
    30         }
    31         
    32         return answer;
    33     }
    34 }
  • 相关阅读:
    349、两个数组的交集 | JS集合
    JS集合Set
    JS里的队列和链表
    使用链表指针获取JSON的节点值
    141、环形链表 | JS-链表
    83、删除排序链表中的重复元素 | JS-链表
    2、两数相加 | JS-链表
    事件循环与任务队列
    933、最近的请求次数 | JS-队列
    栈JS实现
  • 原文地址:https://www.cnblogs.com/sunshineatnoon/p/3862528.html
Copyright © 2020-2023  润新知