[Java]LeetCode49 Anagrams
2015-04-22 10:23
381 查看
Given an array of strings, return all groups of strings that are anagrams.
Note: All inputs will be in lower-case.
题意,就是判断字符数组中是否有回文字符串(判断两个字符串是否由相同的字母组成,但是顺序有可能不一样)。
解题思路:首先想到的是将数组中的字符按字母顺序重排列。然后用map存储,字符串做为key值,用一个List链表记录排序之前的字符串在数组中的index。然后判读list中长度,大于1的说明是有回文字符,加入list。
Note: All inputs will be in lower-case.
题意,就是判断字符数组中是否有回文字符串(判断两个字符串是否由相同的字母组成,但是顺序有可能不一样)。
解题思路:首先想到的是将数组中的字符按字母顺序重排列。然后用map存储,字符串做为key值,用一个List链表记录排序之前的字符串在数组中的index。然后判读list中长度,大于1的说明是有回文字符,加入list。
public List<String> anagrams(String[] strs) { List<String> list=new ArrayList<String>(); int len=strs.length; if(len<=1)return list; Map<String,List<Integer>> map=new HashMap<String,List<Integer>>(); String str=null; StringBuffer buffer=new StringBuffer(); for(int i=0;i<len;i++) { str=strs[i]; char[] chars=str.toCharArray(); Arrays.sort(chars); for(char ch:chars) { buffer.append(ch); } str=buffer.toString(); buffer.delete(0,str.length()); if(map.get(str)==null) { List<Integer> tmpList=new ArrayList<Integer>(); tmpList.add(i); map.put(str, tmpList); } else { map.get(str).add(i); } } Set<String> keySet=map.keySet(); for(Iterator<String> iter=keySet.iterator();iter.hasNext();) { String keyStr=iter.next(); List<Integer> listIndex=map.get(keyStr); len=listIndex.size(); if(len<=1)continue; for(int i=0;i<len;i++) { list.add(strs[listIndex.get(i)]); } } return list; }运行的时间比较长,766ms。是否能优化一下呢。在判断的时候直接存储。
public List<String> anagrams(String[] strs) { List<String> list=new ArrayList<String>(); int len=strs.length; if(len<=1)return list; Map<String,Integer> map=new HashMap<String,Integer>(); String str=null; for(int i=0;i<len;i++) { str=strs[i]; char[] chars=str.toCharArray(); Arrays.sort(chars); str=new String(chars); if(map.containsKey(str))//判断map中是否有重排列的str { int index=map.get(str); if(index!=-1)//判断是否是第二次存在相同的key。如果是,将第一次的index所对应的数组值取出加入list { list.add(strs[index]); map.put(str,-1); } list.add(strs[i]); }else { map.put(str,i); } } return list; }
相关文章推荐
- LeetCode 49 Group_Anagrams Java实现
- 【leetcode-49】Anagrams(java)
- LeetCode-49-Group Anagrams list_to_string、string list
- LeetCode49——Group Anagrams
- leetcode JAVA Anagrams 难度系数3 3.15
- Anagrams leetcode java
- [leetcode]49. Group Anagrams@Java
- Leet Code 49 Group Anagrams - 变形词分组 - Java
- [LeetCode]49 Anagrams
- Leetcode 49 Anagrams
- LeetCode - 49 - Group Anagrams
- (java)leetcode-49
- leetcode[49]Anagrams
- leetcode 49: Anagrams
- [Leetcode 54] 49 Anagrams
- (LeetCode 49)Anagrams
- LeetCode(49)Group Anagrams
- leetcode(49):Group Anagrams
- 【LeetCode】C# 49、Group Anagrams
- [LeetCode-Algorithms-49] "Group Anagrams" (2017.11.21-WEEK12)