Skip to content

Group Shifted Strings

Tim_Gao edited this page Sep 18, 2016 · 1 revision
  1. az, ba has the same pattern
public class Solution {
    private String getPattern(String str){
        StringBuilder sb = new StringBuilder();
        for (int i=1; i<str.length(); ++i){
            sb.append((str.charAt(i) - str.charAt(i-1) + 26) % 26);
        }
        return sb.toString();
    }
    public List<List<String>> groupStrings(String[] strings) {
        HashMap<String, ArrayList<String>> hm = new HashMap<>();
        ArrayList<String> single = new ArrayList<>();
        for (String str : strings){
            if(str.length() == 1){
                single.add(str);
            } else {
                String patt = getPattern(str);
                if(!hm.containsKey(patt)){
                    hm.put(patt, new ArrayList<>());
                }
                hm.get(patt).add(str);
            }
        }
        ArrayList<List<String>> res = new ArrayList<>();
        if (single.size()!=0){
            res.add(single);
        }
        Iterator it = hm.entrySet().iterator();
        while(it.hasNext()){
            Map.Entry me = (Map.Entry) it.next();
            res.add((ArrayList<String>)me.getValue());
        }
        return res;
    }
}

Clone this wiki locally