Anagrams - LeetCode

来源:互联网 发布:nginx 禁止空主机头 编辑:程序博客网 时间:2024/06/05 17:11

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

Note: All inputs will be in lower-case.

这是我找到的最喜欢的解法。这个方法的精髓在于,设计一个HashMap,其中的Key用我们的sort过的String来代替。因为如果两个String 是 Anagrams,也就说明他们包含的字母内容完全一样,只是顺序改变了。

/*    The idea is to use a hashmap to collect groups of anagrams.    The way to determine whether two strings are anagrams is to sort them 
    and see if sorted strings are identical.*/import java.util.*;public class Solution {    public ArrayList<String> anagrams(String[] strs) {        // Start typing your Java solution below        // DO NOT write main() function                ArrayList<String> result = new ArrayList<String>();                HashMap<String,ArrayList<String>> map = new HashMap<String,ArrayList<String>>();                for(String str : strs){            char[] tempstr= str.toCharArray();            Arrays.sort(tempstr);            String sortedstr = new String(tempstr);            if(map.containsKey(sortedstr)){                    map.get(sortedstr).add(str);            }else{                ArrayList<String> list = new ArrayList<String>();                list.add(str);                map.put(sortedstr,list);                      }                }                for(ArrayList<String> list:map.values())            if(list.size()>1)                for(String str : list)                    result.add(str);                            return result;    }}


0 0
原创粉丝点击