zoukankan      html  css  js  c++  java
  • 249.Group Shifted Strings

        /*
         *249.Group Shifted Strings 
         *2016-6-18 by Mingyang
         *Given a string, we can "shift" each of its letter to its successive letter, 
         *for example: "abc" -> "bcd". We can keep "shifting" which forms the sequence:
         *"abc" -> "bcd" -> ... -> "xyz"
         *Given a list of strings which contains only lowercase alphabets, 
         *group all strings that belong to the same shifting sequence.
         *For example, given: ["abc", "bcd", "acef", "xyz", "az", "ba", "a", "z"], 
         *Return:
         *[
         *   ["abc","bcd","xyz"],
         *   ["az","ba"],
         *   ["acef"],
         *   ["a","z"]
         *]
         *这个题目一看就是HashMap,刚开始我说那String的长度来存作为key,但是发现相同长度的string可能不为同一阵营
         *所以后面该用一个新的string,就是把每两个字符之间的差存起来,写出一个string
         *["eqdf", "qcpr"]。
         *((‘q’ - 'e') + 26) % 26 = 12, ((‘d’ - 'q') + 26) % 26 = 13, ((‘f’ - 'd') + 26) % 26 = 2
         *((‘c’ - 'q') + 26) % 26 = 12, ((‘p’ - 'c') + 26) % 26 = 13, ((‘r’ - 'p') + 26) % 26 = 2
         *所以"eqdf"和"qcpr"是一组shifted strings。
         */
         public List<List<String>> groupStrings(String[] strings) {  
                List<List<String>> result = new ArrayList<List<String>>();  
                HashMap<String, List<String>> d = new HashMap<String, List<String>>();  
                for(int i = 0; i < strings.length; i++) {  
                    StringBuffer sb = new StringBuffer();  
                    for(int j = 0; j < strings[i].length(); j++) {  
                        sb.append(Integer.toString(((strings[i].charAt(j) - strings[i].charAt(0)) + 26) % 26));  
                        sb.append(" ");  
                    }  
                    String shift = sb.toString();  
                    if(d.containsKey(shift)) {  
                        d.get(shift).add(strings[i]);  
                    } else {  
                        List<String> l = new ArrayList<String>();  
                        l.add(strings[i]);  
                        d.put(shift, l);  
                    }  
                }                
                for(String s : d.keySet()) {  
                    Collections.sort(d.get(s));  
                    result.add(d.get(s));  
                }   
                return result;  
            }  
  • 相关阅读:
    【转】使用scipy进行层次聚类和k-means聚类
    spark wordcont Spark: sortBy和sortByKey函数详解
    scala akka通信机制
    redis AOF 和RDB
    java虚拟机学习
    快速排序,一个爱情故事-java版
    Caused by: java.io.IOException: Added a key not lexically larger than previous.
    java.io.IOException: No FileSystem for scheme: hdfs
    " java.lang.NoSuchFieldError: HBASE_CLIENT_PREFETCH_LIMIT
    用户活跃度分析
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5599459.html
Copyright © 2011-2022 走看看