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; }
Leave A Comment