题目
给定两个字符串 s 和 t,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
示例 1:
输入:s = “abcd”, t = “abcde”
输出:“e”
解释:‘e’ 是那个被添加的字母。
示例 2:
输入:s = “”, t = “y”
输出:“y”
示例 3:
输入:s = “a”, t = “aa”
输出:“a”
示例 4:
输入:s = “ae”, t = “aea”
输出:“a”
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-the-difference
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
- 分析
1.转为char[] tArray和sArray进行排序
2.确定较长的char[] longOne数组,其长度为n,遍历{0,n-2},依次比较tArray[i] 和sArray[i]
3.如果不同则返回longOne[i];
4.遍历结束,返回longOne[n-1]
public char findTheDifference(String s, String t) {
char[] sArray = s.toCharArray();
Arrays.sort(sArray);
char[] tArray = t.toCharArray();
Arrays.sort(tArray);
char[] longOne=(tArray.length>sArray.length)?tArray:sArray;
for(int i=0;i<longOne.length-1;i++){
if(sArray[i]!=tArray[i]){
return longOne[i];
}
}
return longOne[longOne.length-1];
优化
上述执行时间,很大一部分是由于排序带来的,那么就不排序。
- 思路:
1.采用求和,分别求s和t对应数组的和,最后做差。
public char findTheDifference(String s, String t) {
char[] sArray = s.toCharArray();
int sSum=0;
int tSum=0;
char[] tArray = t.toCharArray();
for(int i=0;i<sArray.length;i++){
sSum+=sArray[i];
}
for(int i=0;i<tArray.length;i++){
tSum+=tArray[i];
}
return (char)(Math.abs(tSum-sSum));
}
- 上述代码中有两个循环,两个循环变量,缩减一下.
public char findTheDifferencePro1(String s, String t) {
char[] tArray = t.toCharArray();
char[] sArray = s.toCharArray();
int diff=0;
char[] longOne = (tArray.length > sArray.length) ? tArray : sArray;
for (int i = 0; i < longOne.length-1; i++) {
diff+=tArray[i]-sArray[i];
}
return (char)(diff+longOne[longOne.length-1]);
}
最后发现并没有多少提升,写了个寂寞…