Group Shifted Strings

给一组string, 定义一下shift

"abc" - >; "bcd" ->; ... ->; "xyz"

让你找这组string中,能互相shift的几组.

可以看出, 当一个string的字符之间的距离决定了shift后的string. 所以对字符之间的距离进行记录, 当做key, 就可以找到. 这里先取一下string首字母当做offset, 然后算距离. 最后记录在一个key(string)中.

  public List<List<String>> groupStrings(String[] strings) {
        List<List<String>> res = new ArrayList<List<String>>();
        HashMap<String, List<String>> maps = new HashMap<>();
        for(int i = 0 ; i < strings.length; i++) {
            String key = "";
            int offset = strings[i].charAt(0) - 'a';
            for(int j = 1; j < strings[i].length(); j++) {
                key+= (strings[i].charAt(j) - offset + 26) % 26;
            }
            if(!maps.containsKey(key))
                maps.put(key,new ArrayList<>());
            maps.get(key).add(strings[i]);
        }
        for(List<String> list : maps.values()){
            Collections.sort(list);
            res.add(list);
        }
        return res;
    }