LintCode 171 乱序字符串

来源:互联网 发布:java 射击游戏 编辑:程序博客网 时间:2024/05/22 06:16

昨天做的一题很有意思的字符串题目。
用到了 HashMap 当中的 Entry 链表,顺便又复习了一下 HashMap,对应的方法在代码当中已经有注释。

import java.util.*;public class Anagrams {    /**     * 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。     * 如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中     * @param strs     * @return     */    public List<String> ana(String[] strs) {        List<String> result = new ArrayList<>();        if (strs == null || strs.length == 0)            return result;        Map<String, ArrayList<String>> map = new HashMap<>();        for (int i = 0; i < strs.length; i++) {            char[] arr = strs[i].toCharArray();            Arrays.sort(arr);            String s = String.valueOf(arr);            //不包含的时候创建一个新的list,并向其中添加当前元素            if (!map.containsKey(s)) {                ArrayList<String> list = new ArrayList<>();                map.put(s, list);            }            map.get(s).add(strs[i]);        }        // map.entrySet()返回“HashMap的Entry集合”,它实际是返回一个EntrySet对象  实际上调用的是 map.entrySet0()        // 这里的Map.Entry<String, ArrayList<String>> entry 创建的是一个 Map.Entry 对象        // Map.Entry<K, V> map : map.entry.Set()        // 在 HashMap 当中 Entry<K, V> implements Map.Entry<K, V>        for (Map.Entry<String, ArrayList<String>> entry : map.entrySet()) {            if (entry.getValue().size() >= 2) result.addAll(entry.getValue());        }        return result;    }}
原创粉丝点击