public class Solution {
public List<String> anagrams(String[] strs) {
Map<Integer, String> map = new HashMap<Integer, String>();
Set<String> set = new HashSet<String>();
List<String> result = new LinkedList<String>();
if(strs.length == 0 || strs.length == 1)//零和一两种情况直接return
return result;
for(String s : strs){
char[] c = s.toCharArray();//String.toCharArray 方法 ,作用:将字符串转换为字符数组。
Arrays.sort(c);//将字符数组排序
String cur = new String(c);//将排序后的字符数组转化成字符串cur
if(map.containsKey(cur.hashCode())){
if(!set.contains(cur)){
//若map里存在这个字符串cur且set不里存在这个字符串,就将s放入result,
//把cur加入set里,把map里的值也放入result
//(这种情况就是第二次遇到相同的cur。第二次遇到时,刚确定它是anagram。所以要把两个值都放到result里面)
result.add(s);
set.add(cur);
result.add(map.get(cur.hashCode()));
continue;
}
result.add(s);//若map里存在这个字符串且set里存在这个字符串,就将s放入result
//(这种情况是第n次(n>2)遇到某个cur,只要将其加入result里就行了)
continue;
}
map.put(cur.hashCode(), s);//若map里不存在这个字符串cur,cur.hashCode()和s成对放入map里
//(这种情况就是第一次遇到某个cur)
}
return result;
}
}
//知识补充
// You can use the enhanced for loop to print out array values
// for(itemDataType tempVariable : arrayName)
// for(int row : numberArray)
// {
// System.out.print(row);
// }
// System.out.println("\n");
//See more at: http://www.newthinktank.com/2012/01/java-video-tutorial-9/#sthash.wAgSWJXl.dpuf
// To use enhanced for for a multidimensional array you follow this formula
// for(dataType[] varForRow : arrayName)
//String[][] multiDArray = new String[10][10];
// for(String[] rows : multiDArray)
// {
// // for(elementDataType varForColumn : varForRow)
// for(String column : rows)
// {
// System.out.print("| " + column + " ");
// }
// System.out.println("|");
// }
//- See more at: http://www.newthinktank.com/2012/01/java-video-tutorial-9/#sthash.wAgSWJXl.dpuf
//hashCode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值
//http://zhidao.baidu.com/link?url=uno_Sgf-wGqm0NPnWkEl7ZyFJ9YNvjpZwKKl1A5UyL9LAt07I-Pe3bBhraFll8HyGfTp-LZjO3ThBVZ4UWM1W_
//Hashtable vs Hashmap
//Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现
//HashMap允许将null作为一个entry的key或者value,而Hashtable不允许
//还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
// 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在
//多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap
//就必须为之提供外同步。
Anagrams
最新推荐文章于 2024-07-19 19:25:43 发布