zoukankan      html  css  js  c++  java
  • 49. Group Anagrams

    在美版leetcode上看到大神的思路,用质数表示26个字母,把字符串的各个字母相乘,这样可保证字母异位词的乘积必定是相等的。其余步骤就是用map存储,和别人的一致了。(这个用质数表示真的很骚啊!!!)

    //因为找不到一个可以比对的代号  因为String值相同 地址可能不同 所以苦于这个方法 发现leetcode真是的人才多 用质数乘出来的数去保存 牛逼
    class Solution {
     	public List<List<String>> groupAnagrams(String[] strs) {
                    if (strs == null || strs.length ==0)  return new ArrayList<List<String>>();            //效率提高30% 看来里面坑多
    		List<List<String>> arrll = new LinkedList<List<String>>();
    		HashMap<Long, List<String>> hsm = new HashMap<Long, List<String>>();
    		
    		for (int i = 0; i < strs.length; i++) {
    			long s = find(strs[i]);
    			if (!hsm.containsKey(s)) {
    				List<String> arrstr = new LinkedList<String>();
    				arrstr.add(strs[i]);
    				hsm.put(s, arrstr);
    			} else {
    				hsm.get(s).add(strs[i]);
    			}
    		}
    		arrll.addAll(hsm.values());
    		return arrll;
    	}
    	public long find(String temp) {
    		int arr[] = {2,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};
    		long ans = 1 ;
    		for(int i = 0 ; i< temp.length();i++) {
    			ans *= arr[(temp.charAt(i)-'a')];
    		}
    		return ans;
    	}
    }
    
    
    class Solution {
        public List<List<String>> groupAnagrams(String[] strs) {
            if (strs == null || strs.length ==0)  return new ArrayList<List<String>>(); 
            HashMap<String,ArrayList<String>> map=new HashMap<>();
            for(String s:strs){
                char[] ch=s.toCharArray();
                Arrays.sort(ch);
                String key=String.valueOf(ch);
                if(!map.containsKey(key))    map.put(key,new ArrayList<>());
                map.get(key).add(s);
            }
            return new ArrayList(map.values());
        }
    }
    
    三种方法中,通常String.valueOf(object)是好可靠的方式,不会带来任何异常;
    当object为null 时,String.valueOf(object)返回的值是字符串的"null",而不是null;
    其实,小编通常会使用Object.toString()方法,但前提是要对null数据进行处理,确保不会给页面返回字符串的"null"值。
    

  • 相关阅读:
    C-Scanf连续调用多次并且存在%c的问题
    JavaScript-常用正则函数(适合忘记时看)
    JavaScript-深入理解JavaScript(一、预编译和执行过程)
    Python-代码性能优化技巧
    Python-深入理解元类(metaclass)
    Python-编码之大彻大悟
    Python-正确使用Unicode
    Fiddler-抓取安卓手机APP请求地址
    unity, access sprite of UGUI Image
    unity, UGUI Text outline
  • 原文地址:https://www.cnblogs.com/cznczai/p/11315750.html
Copyright © 2011-2022 走看看