8/10, Google Tag
public class Solution {
public List<List<String>> groupStrings(String[] strings) {
List<List<String>> rst = new ArrayList<>();
// Key : diff1,diff2... single character is ""
// Value : list of strings grouped together
HashMap<String, List<String>> map = new HashMap<>();
StringBuilder sb = new StringBuilder();
for(int i = 0 ; i < strings.length; i++){
String str = strings[i];
sb.setLength(0);
for(int j = 0; j < str.length() - 1; j++){
int diff = str.charAt(j) - str.charAt(j + 1);
if(diff < 0) diff += 26;
sb.append(diff);
sb.append(',');
}
String key = sb.toString();
if(!map.containsKey(key)) map.put(key, new ArrayList<String>());
map.get(key).add(str);
}
Iterator<String> iter = map.keySet().iterator();
while(iter.hasNext()){
rst.add(map.get(iter.next()));
}
return rst;
}
}以上两招都可以很简便的减少内存和计算时间开销。
再仔细观察一下这题:
这就是背包啊!
流程:
1: 右往左,找下落;
2:左往右,找 threshold (换过来的数,怎么说也得比 nums[start] 大)
3:交换,反转。
注意:index == 0 并且 i == 0 的时候要跳过,免得在起始位置填上 0 .
后来发现有点多余,可以直接用内置的 str1.compareTo(str2).
这题比较简洁的写法如下,明天学习一个。
这种写法的核心是只看 a 的 “正负”,无所谓 0.
Last updated