这道题关键在于得能确定:位移值,进而找到每个str的位移前的原始状态
int shift = (str.charAt(i) - str.charAt(0) + 26) % 26;
是最关键的。这个我们第一次见到,请理解学习。
对于最后的排序,请记得我们可以采用现有的api去处理,不要太给自己找麻烦,因为既然这个不是真正的考点。
for (List<String> list: results) {
Collections.sort(list);
}
代码
public class Solution {
public List<List<String>> groupStrings(String[] strings) {
List<List<String>> results = new LinkedList<>();
if (strings == null || strings.length < 1) {
return results;
}
Map<String, List<String>> map = new HashMap<>();
for (String str: strings) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
int shift = (str.charAt(i) - str.charAt(0) + 26) % 26;
sb.append(shift + " ");
}
if (map.containsKey(sb.toString())) {
map.get(sb.toString()).add(str);
} else {
List<String> list = new LinkedList<>();
list.add(str);
results.add(list);
map.put(sb.toString(), list);
}
}
for (List<String> list: results) {
Collections.sort(list);
}
return results;
}
}