05 August 2008
通过将字符串的每个字母移动到其后续字母来移动字符串。
例如,“abc”可以转换为“bcd”。
我们可以不断移动字符串以形成一个序列。
例如,我们可以不断移动“abc”以形成序列:“abc”->“bcd”->…->“xyz”。
给定一个字符串数组,将属于同一移位序列的所有字符串 [i] 分组。您可以按任何顺序返回答案。
Example 1:
1
2
Input: strings = ["abc","bcd","acef","xyz","az","ba","a","z"]
Output: [["acef"],["a","z"],["abc","bcd","xyz"],["az","ba"]]
Example 2:
1
2
Input: strings = ["a"]
Output: [["a"]]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
public List<List<String>> groupStrings(String[] strings) {
List<List<String>> result = new ArrayList<>();
Map<String, List<String>> map = new HashMap<>();
for (String str : strings) {
int offset = str.charAt(0) - 'a';
StringBuilder key = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char ch = (char) (str.charAt(i) - offset);
if ( ch < 'a') {
ch += 26;
}
key.append(ch);
}
if (!map.containsKey(key.toString())) {
List<String> list = new ArrayList<String>();
map.put(key.toString(), list);
}
map.get(key.toString()).add(str);
}
for (String key : map.keySet()) {
List<String> list = map.get(key);
Collections.sort(list);
result.add(list);
}
return result;
}
}