LeetCode 49. Group Anagrams

题解

这题就是哈希,让同样char的组合有同样的键值,注意防碰撞。
用了素数表,字符数位的素数做乘积作为键。

ps: 平时不写java,临时写一下遇到无数bug。常见的与c++ api 不同的就算了。
比如 Arrays.asList(str),只可读不可写。。。
List<List> 与 ArrayList< ArrayList > 不匹配。。。


Code

class Solution {
    public int[] col= {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157};
    public List<List<String>> groupAnagrams(String[] strs) {
        
        	int p;
			int n=0;
       	    int pos;
			Map<Integer,Integer> map = new HashMap<>();
			List<List<String>> res = new ArrayList< List <String> >();// keng
			for(String str:strs){
				p = 1;
				for(int i=str.length()-1;i>-1;i--){
					p*= col[str.charAt(i) - 'a'];
				}

				pos=map.getOrDefault(p,n);
				if(pos == n){
					res.add( new ArrayList<>( Arrays.asList(str)) );// keng
					map.put(p,n);
					n++;
				}else{
                     res.get(pos).add(str);
				}
			}
			return res;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值