问题描述
思路解析
- 只有小写字母,这种设计参数小的,直接桶排序
- 我最开始的想法是使用两个不同的数组,分别存入他们单个字符转换后的值,然后比较是否相同。也确实通过了
- 看了题解后,发现可以优化,首先因为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 ' ';}
}