Anagrams

22 篇文章 0 订阅
1 篇文章 0 订阅
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 
//就必须为之提供外同步。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值