一道简单的leetcode题,玩转字符串
哈喽哈喽,我是你们的金樽清酒,最近我刷了一道简单的leetcode题,但是啊,是字符串的,每次做到字符串就让我感觉头痛,因为不能直接进行排序,对字符串进行某些操作就会很麻烦,但是呀,看了题解之后,才发现有很多种办法解决问题。
题目
给定两个字符串 s 和 t ,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
示例 1:
输入: s = "abcd", t = "abcde"
输出: "e"
解释: 'e' 是那个被添加的字母。
示例 2:
输入: s = "", t = "y"
输出: "y"
提示:
0 <= s.length <= 1000t.length == s.length + 1s和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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
先将字符串转为数组,再排序再转为字符串。不会字符串排序的哥们学一下哦。我就是属于那种不会的。哈哈哈哈哈哈。