标签:ssi ups keep each define += set -o code
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"] ]
与Group Anagrams类似. 维护一个HashMap, key是每个string 的 base型.
Time Complexity: O(n * strings.length), n 是每个string的平均长度.
Space: O(hm.size()), HashMap size.
// "static void main" must be defined in a public class.
public class Main {
public static void main(String[] args) {
String[] strs = {"abc", "bcd", "acef", "xyz", "az", "ba", "a", "z"};
List<List<String>> list = groupStrings(strs);
for(int i=0; i<list.size(); i++){
System.out.println("List "+(i+1));
List<String> subList = list.get(i);
for(int j=0; j<subList.size(); j++){
System.out.println(subList.get(j));
}
}
}
public static List<List<String>> groupStrings(String[] strings) {
if(strings == null || strings.length == 0){
return new ArrayList<List<String>>();
}
Map<String, List<String>> map = new HashMap<>();
for(int i=0; i<strings.length; i++){
String str = getBase(strings[i]);
if(!map.containsKey(str)){
map.put(str, new ArrayList<String>());
}
map.get(str).add(strings[i]);
}
return new ArrayList<List<String>>(map.values());
}
public static String getBase(String str){
if(str == null || str.length()==0){
return str;
}
StringBuilder sb = new StringBuilder();
int offset = str.charAt(0) - ‘a‘;
for(int i=0; i<str.length(); i++){
char c = (char) (str.charAt(i)-offset);
if(c < ‘a‘){
c += 26;
}
sb.append(c);
}
return sb.toString();
}
}
LeetCode – Group Shifted Strings
标签:ssi ups keep each define += set -o code
原文地址:https://www.cnblogs.com/incrediblechangshuo/p/9352106.html