249 Group Shifted Strings

来源:互联网 发布:slmmsk软件下载 编辑:程序博客网 时间:2024/04/28 06:39

不是很难的一道题,典型的用HashMap将String分类,关键是找到分类的标准,也就是找到map中key是什么。。。这道题就是与我google加面的题目很像。所以我就分开写了一个函数来使用,如果在主函数里面写,会写的非常不好看,readability很差

仔细检查后,一遍bug-free,而且效率也挺高85%,


public class Solution {    public List<List<String>> groupStrings(String[] strings) {        List<List<String>> list = new ArrayList<List<String>>();        Map<String, List<String>> map = new HashMap<String, List<String>>();        for(String str: strings){            String keyWord=shuffle(str);            if(!map.containsKey(keyWord)) map.put(keyWord, new ArrayList<String>());            map.get(keyWord).add(str);        }                for(String key: map.keySet()){            list.add(map.get(key));        }        return list;    }        private String shuffle(String word){        StringBuilder result= new StringBuilder();        char bar= word.charAt(0);        for(char ch: word.toCharArray()){            int offset=(ch-bar)<0?(ch-bar+26):(ch-bar);            result.append((char)(offset+'a'));        }        return result.toString();    }}// 理解了题目意思,很自然想到用HashMap来进行各个str的划分,然后关键问题就是找到一个划分的标准了。// 想到的部分:1,首先必须等长str,第一个条件;2,然后各个自己字母之间的差距是一样的;3,如果遇到了katy这样的情况,a比k小,那么差值就成了负数,那么就需要+26;我想可以通过尝试一个数组来存储这样的信息,但是把数组作为key,显然不合适?若是把sigma加和作为key也同样不合适,abc和acb就是同一个key了,不满足条件。。。// 参考了别人的答案,瞬间明白,用一个新的String来代表不就完了么,本质上就是你个那个整型数组的思想啊。// 这道题的形式就是我google加面的第二道题,只是那里给出了一个明确的定义,给出了shorten这个方法,直接就可以得到一个key了,这里的话需要自己思考出一个key,这往往也是解题的关键。


0 0
原创粉丝点击