标签:math lse 时间 问题 rar 排除 内存 成功 false
问题描述如下:
分析问题,发现问题实际可理解为
有两个字符串,要求如下:
1、包含的字符种类完全一样;
2、把各个字符的重复次数放在一个数组里,数组在排序后完全一样;
所以:
class Solution {
public boolean closeStrings(String word1, String word2) {
if (word1.length()!=word2.length()) return false; //如果两个字符串长度不一样,返回false
int[] c1=new int[26];
int[] c2=new int[26];
for (char c:word1.toCharArray()) c1[c-97]++;//遍历字符串,用长度 26的数组存放一个字母出现的次数
for (char c:word2.toCharArray()) c2[c-97]++;
int i=0;
for (i=0;i<26;i++)
if((c1[i]==0)^(c2[i]==0)) return false;//相同位置的字母,非零性必须一样,用异或运算能显著减少用时
Arrays.sort(c1);
Arrays.sort(c2);
for (i=0;i<26;i++)
if(c1[i]!=c2[i]) return false;//排序后的数组得相同
return true;
}
}
优化说明:通过减少运算次数,合并可合并操作,优先排除可排除数组的操作,成功优化了执行时间。但内存消耗已经优化不动了,内存消耗38.9MB就能击破100%,但优不动了。
标签:math lse 时间 问题 rar 排除 内存 成功 false
原文地址:https://www.cnblogs.com/pycdu/p/14629887.html