找不同 一道简单的leetcode题 玩转字符串

166 阅读2分钟

一道简单的leetcode题,玩转字符串

哈喽哈喽,我是你们的金樽清酒,最近我刷了一道简单的leetcode题,但是啊,是字符串的,每次做到字符串就让我感觉头痛,因为不能直接进行排序,对字符串进行某些操作就会很麻烦,但是呀,看了题解之后,才发现有很多种办法解决问题。

题目

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

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

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

 

示例 1:

输入: s = "abcd", t = "abcde"
输出: "e"
解释: 'e' 是那个被添加的字母。

示例 2:

输入: s = "", t = "y"
输出: "y"

 

提示:

  • 0 <= s.length <= 1000
  • t.length == s.length + 1
  • s 和 t 只包含小写字母

解法一 异或运算

 let res=0
    for(let c of s){
        res^=c.charCodeAt()
    }
    for(let c of t){
        res^=c.charCodeAt()
    }//要先转为ascall码才能进行异或运算
    return String.fromCharCode(res)
    }

我们知道异或是一个很好的找不同的办法,因为相同的数异或为0,0异或某一个数为某一个数,且异或符合交换律,完美解决嘛。!!!但是,字符串不能直接异或要转换为ascall码。charCodeAt()方法就是转化为ascall码的方法。最后再将ascall码转化为字符串,用String.fromcharCode()函数来完成。

解法二 计算得ascall码的差值

 if (!s.length) return t;
    let sum1 = 0, sum2 = 0, i = 0;

    while (i < t.length) {
        if (s[i]) sum1 += s.charCodeAt(i);
        if (t[i]) sum2 += t.charCodeAt(i);
        i++;
    }
    return String.fromCharCode(sum2 - sum1);

作者:阿巴阿巴
链接:https://leetcode.cn/problems/find-the-difference/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这个就不做过多描述了,与第一题有异曲同工之妙,也是获得ascall码转字符串

解法三 对字符串进行排序

  s = s.split('').sort().join('');
    t = t.split('').sort().join('');

    for (let i = 0; i < t.length; i++) {
        if (s[i] != t[i]) {
            return t[i];
        }
    }

作者:阿巴阿巴
链接:https://leetcode.cn/problems/find-the-difference/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

先将字符串转为数组,再排序再转为字符串。不会字符串排序的哥们学一下哦。我就是属于那种不会的。哈哈哈哈哈哈。