问题描述
思路解析
- 只有小写字母,这种设计参数小的,直接桶排序
- 我最开始的想法是使用两个不同的数组,分别存入他们单个字符转换后的值,然后比较是否相同。也确实通过了
- 看了题解后,发现可以优化,首先因为t相比于s,是增加了一个字符。那么t的对应的那个单词一定是比s多的。因此可以只用一个字符数组就可以了
- s中++,t--,只要数组中小于0,代表就是这个数字
代码
class Solution {
public char findTheDifference(String s, String t) {
/**
只含有小写字母,用桶排序,然后对于0~25的数字是否一样,不一样则输出
*/
int len1=s.length();
int len2=t.length();
int[] arr1=new int[26];
int[] arr2=new int[26];
for(int i=0;i<len1;i++){
arr1[s.charAt(i)-'a']++;
}
for(int j=0;j<len2;j++){
arr2[t.charAt(j)-'a']++;
}
char res;
for(int i=0;i<26;i++){
if(arr1[i]!=arr2[i])
return (char)(i+'a');
}
return ' ';
}
}
优化后代码
class Solution {
public char findTheDifference(String s, String t) {
/**
只含有小写字母,用桶排序,然后对于0~25的数字是否一样,不一样则输出
*/
int len1=s.length();
int len2=t.length();
int[] arr1=new int[26];
for(int i=0;i<len1;i++){
arr1[s.charAt(i)-'a']++;
}
for(int j=0;j<len2;j++){
char ch=t.charAt(j);
arr1[ch-'a']--;
if(arr1[ch-'a']<0){
return ch;
}
}
return ' ';
}
}