今天做的都是E难度的。。懒得写。
这道感觉不是E难度。。
判断是否能SHIFT是使用
if(a.charAt(i) - a.charAt(i-1) == b.charAt(i) - b.charAt(i-1)||(int)Math.abs((a.charAt(i) - a.charAt(i-1)) - (b.charAt(i) - b.charAt(i-1))) == 26 )
俩字母之间相差是一样的,或者+了26,因为Z的下一个是A。
然后好像其实也没什么别的值得说的,总结下就是,按长度先分类,然后同样长度的要再按SHIFT分类。
这题怎么都不像E难度的。。
public class Solution {
public List<List<String>> groupStrings(String[] strings)
{
List<List<String>> res = new ArrayList<List<String>>();
Map<Integer,List<String>> map = new HashMap<Integer,List<String>>();
for(int i = 0; i < strings.length;i++)
{
if(map.containsKey(strings[i].length()))
{
map.get(strings[i].length()).add(strings[i]);
}
else
{
List<String> tempList = new ArrayList<>();
tempList.add(strings[i]);
map.put(strings[i].length(),new ArrayList<>(tempList));
}
}
for(Integer k: map.keySet())
{
List<String> list = map.get(k);
while(list.size()!=0)
{
String a = list.get(0);
list.remove(0);
List<String> addingList = new ArrayList<>();
addingList.add(a);
for(int i = 0; i < list.size();)
{
if(shiftable(a,list.get(i)))
{
addingList.add(list.remove(i));
}
else i++;
}
res.add(new ArrayList<String>(addingList));
}
}
return res;
}
public boolean shiftable(String a, String b)
{
int m = 0, n= 0;
for(int i = 1; i < a.length();i++)
{
if(a.charAt(i) - a.charAt(i-1) == b.charAt(i) - b.charAt(i-1) ||
(int)Math.abs((a.charAt(i) - a.charAt(i-1)) - (b.charAt(i) - b.charAt(i-1))) == 26 ) continue;
else return false;
}
return true;
}
}