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

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

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

示例:

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

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

输出:
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;
        
    }
}

运行结果

 力扣(LeetCode)389. 找不同 随笔

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄