首页 > 代码库 > LeetCode-Group Shifted Strings

LeetCode-Group Shifted Strings

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"],
A solution is:

[  ["abc","bcd","xyz"],  ["az","ba"],  ["acef"],  ["a","z"]]
 
Solution:
public class Solution {    public List<List<String>> groupStrings(String[] strings) {        List<List<String>> resLists = new LinkedList<List<String>>();                HashMap<String,List<String>> patternMap = new HashMap<String,List<String>>();        for (String str : strings){            StringBuilder builder = new StringBuilder().append(str);            int delta = builder.charAt(0)-‘a‘;            builder.setCharAt(0,‘a‘);            for (int i=1;i<builder.length();i++){                char c = (char) ((builder.charAt(i) + 26 - delta)%26);                builder.setCharAt(i,c);            }            String pattern = builder.toString();            if (!patternMap.containsKey(pattern)){                patternMap.put(pattern,new LinkedList<String>());            }            patternMap.get(pattern).add(str);        }                for (List<String> strList : patternMap.values()){            resLists.add(strList);        }        return resLists;    }}

 

 

LeetCode-Group Shifted Strings