力扣热题100道49字母异位词分组
题目
解决方法
class Solution {public List<List<String>> groupAnagrams(String[] strs) {List<List<String>> arrs=new ArrayList();int[]signal=new int[strs.length];for (int i=0;i<strs.length;i++){if(signal[i]==1){continue;}int l1=strs[i].length();List<String> arr=new ArrayList();arr.add(strs[i]);char[] c1=strs[i].toCharArray();Arrays.sort(c1);for(int j=i+1;j<strs.length;j++){int l2=strs[j].length();if(l1!=l2) continue;char[] c2=strs[j].toCharArray(); Arrays.sort(c2);if(Arrays.equals(c1,c2)){arr.add(strs[j]);signal[j]=1;}}arrs.add(arr);}return arrs;}
}
之前提交过的版本
超出时间限制,下面的代码是我没通过的(当我加上了那一行就通过了)
没通过的原因
他测试用例的输入太逆天了,我观察了一下,只要我将字母数量不同的字符串筛选一下就可以少让代码运行好多次
加上了 if(l1!=l2) continue;这一行。
这是我之前的版本(没有比较字符串的字符数)。由此可见,当我们遇到比较字符串相同的问题的时候,一定要先比较字符串的字数是否相同,因为比较字数不花什么时间(相较于哪些要加for循环的),之要用上就会省很多时间
class Solution {public List<List<String>> groupAnagrams(String[] strs) {List<List<String>> arrs=new ArrayList();int[]signal=new int[strs.length];for (int i=0;i<strs.length;i++){if(signal[i]==1){continue;}List<String> arr=new ArrayList();arr.add(strs[i]);char[] c1=strs[i].toCharArray();Arrays.sort(c1);for(int j=i+1;j<strs.length;j++){char[] c2=strs[j].toCharArray(); Arrays.sort(c2);if(Arrays.equals(c1,c2)){arr.add(strs[j]);signal[j]=1;}}arrs.add(arr);}return arrs;}
}