力扣(LeetCode)389. 找不同

给定两个字符串 s 和 t,它们只包含小写字母。

字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。

请找出在 t 中被添加的字母。

示例:

输入:
s = "abcd"
t = "abcde"

输出:
e

解释:
'e' 是那个被添加的字母。

思路 1.先将字符串排序,从小到大,然后逐一比较

这种情况和1001个数,每个数字1~1000,有一个重复数字一样。可以使用异或法 或者作差法

java 字符数组排序遍历查找 版

class Solution {
    public char findTheDifference(String s, String t) {
        char[] cs = s.toCharArray();
        char[] ct = t.toCharArray();
        Arrays.sort(cs);
        Arrays.sort(ct);
        for(int i=0;i<cs.length;i++) {
            if(cs[i]!=ct[i]){
                return ct[i];  
            }
        }
        return ct[ct.length-1];
    }
}

java 字符数组求和作差 版

class Solution {
    public char findTheDifference(String s, String t) {
       char[] cs = s.toCharArray();
       char[] ct = t.toCharArray();
       int total = 0;
       for(int i=0;i<ct.length;i++) {
           total +=ct[i];
       }
       for(int i=0;i<cs.length;i++) {
           total -=cs[i];
       }
       return (char)total;
        
    }
}

java 字符数组异或 版

class Solution {
    public char findTheDifference(String s, String t) {
       char[] cs = s.toCharArray();
       char[] ct = t.toCharArray();
       int total = 0;
       for(int i=0;i<ct.length;i++) {
           total ^=ct[i];
       }
       for(int i=0;i<cs.length;i++) {
           total ^=cs[i];
       }
       return (char)total;
        
    }
}

运行结果

posted @ 2019-04-08 16:35  lick  阅读(234)  评论(0编辑  收藏  举报