• 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;  
            }  
  • 相关阅读:
    一本书
    在linux oracle 10g/11g x64bit环境中,goldengate随os启动而自己主动启动的脚本
    关于仿酷狗音乐播放器开源:寻求一套音乐播放器素材,让仿酷狗开源
    Cocos2d-x中Vector&lt;T&gt;容器以及实例介绍
    成都传智播客Java/PHP培训就业率高
    P1341 无序字母对
    P1168 中位数
    P1146 硬币翻转
    P1340 兽径管理
    P2023 [AHOI2009]维护序列
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5599459.html
Copyright © 2020-2023  润新知