第32题 Anagrams

来源:互联网 发布:巨人网络 研发 待遇 编辑:程序博客网 时间:2024/06/05 10:55

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

Note: All inputs will be in lower-case.

Hide Tags
 Hash Table String





Solution in Java:
public class Solution {    public List<String> anagrams(String[] strs) {        Map<String, List<Integer>> anaMap = new HashMap<String, List<Integer>>();        for(int i=0; i<strs.length; i++){            char[] curStr = strs[i].toCharArray();            Arrays.sort(curStr);            String orig = String.valueOf(curStr);            if(anaMap.containsKey(orig)){                List<Integer> curList = anaMap.get(orig);                curList.add(i);                anaMap.put(orig, curList);            }else{                List<Integer> curList = new ArrayList<Integer>();                curList.add(i);                anaMap.put(orig, curList);            }        }                List<String> anagrams = new ArrayList<String>();                Iterator<String> iter = anaMap.keySet().iterator();        while(iter.hasNext()){            String curKey = iter.next();            List<Integer> curList = anaMap.get(curKey);            if(curList.size()>1){                for(int i=0; i<curList.size(); i++){                    anagrams.add(strs[curList.get(i)]);                }            }        }        return anagrams;    }}

Note:
1. anagram意思是变位词,即变换或颠倒String中字母顺序而成的另一词。所以变位词长度一定相同。
2. 将一个String中字母按字母顺序排序,先将String变成char array,然后用Arrays.sort(char[])函数。
3. char[]到String转换: str = String.valueOf(char[])
4. 检查map中有无某一key:map.containsKey(key)返回boolean值
5. 遍历HashMap:可以通过keySet遍历,建立Iterator<String> iter = map.keySet().iterator();
while(iter.hasNext()){...}
6. 获取ArrayList中某index的值:arrayList.get(index)
0 0
原创粉丝点击