Anagrams变位词

来源:互联网 发布:风速打印软件 编辑:程序博客网 时间:2024/06/01 19:26

题目:

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

Note: All inputs will be in lower-case.

思路:
字符串和在数组中的位置为映射关系,并且要判断重复性,所以选择hashmap


1、依次取出字符串数组中的每个字符串,将其转换成字符数组
2、对字符数组进行排序再转换成字符串
3、判断排序后的字符串,是否是hashmap中的键 ,利用get()
如果不是,则将其存为key,将其在字符串数组中的位置存为value
如果是,则get()返回的是对应的值,将该值对应的数组中的字符串存入StringBuilder,并将hashmap中的该键对应的value置为-1




Java实现:


public class Anagrams {
public static void main(String[] args)
{
String[] s= {"ab","bcd","ba","b","bbb","cbd","ba"};

ArrayList<String> arr=new ArrayList<String>();
arr=anagrams(s);
System.out.println(arr);

}


public static ArrayList<String> anagrams(String[] strs)
{
HashMap<String,Integer> hm=new HashMap<String,Integer>();
ArrayList<String> al=new ArrayList<String>();

for(int i=0;i<strs.length;i++)
{
char[] ch=strs[i].toCharArray();
Arrays.sort(ch);
String s=new String(ch);

if(!hm.containsKey(s))//如果不包含该字符串
{
hm.put(s, i);
}
else//如果已经包含
{
int value=hm.get(s);
if(value!=-1)
{
al.add(strs[value]);
hm.put(s, -1);
}

al.add(strs[i]);
}


}

return al;
}




}




原创粉丝点击